MS Sql: Условный ORDER BY Вопрос о ASC/DESC

Переменные в Python неизменяемы, что означает, что они не изменяются со временем или не могут быть изменены, если не будут упомянуты что-то другое. Другими словами, использование доступных типов данных невозможно. Существует причина, по которой Python - это увеличение скорости и выразительности. Вероятно, есть способ реализовать то, что вы хотите сделать, без изменяемого типа данных.

Если вы настаиваете на использовании изменяемого типа данных, есть языки, которые разрешают это, и может быть импортируемый модуль или определение класса который позволяет это, но он очень непитонический.

См.: https://mail.python.org/pipermail/tutor/2000-August/001976.html

25
задан Andomar 12 May 2009 в 06:55
поделиться

4 ответа

Не изменяйте ASC или DESC , меняйте знак сортируемой вещи:

SELECT * FROM table 
ORDER BY 
CASE WHEN @Direction = 1 THEN -id else id END asc;

ОП спрашивает:

Ребята, я не эксперт по SQL, пожалуйста, объясните мне, что означает id и -id, он управляет направлением упорядочения?

id - это любой столбец, по которому вы сортируете; -id это просто отрицание этого, id * -1. Если вы сортируете по более чем одному столбцу, вам нужно отменить каждый столбец:

SELECT * FROM table 
ORDER BY 
CASE WHEN @Direction = 1 THEN -id else id END 
CASE WHEN @Direction = 1 THEN -othercolumn else othercolumn END ;

Если вы упорядочиваете по нечисловому столбцу, вам нужно найти выражение, которое делает этот столбец «отрицательным»; написание функции для этого может помочь.

38
ответ дан 28 November 2019 в 20:33
поделиться
SELECT * 
FROM Data 
ORDER BY 
Case WHEN @Direction = 1 THEN SortOrder END DESC, 
Case WHEN 1=1 THEN SortOrder END
10
ответ дан Jeremy Giaco 15 October 2019 в 15:44
поделиться

Вы также можете использовать схему, которая поддерживает все типы столбцов:

SELECT <column_list> FROM <table> ORDER BY CASE WHEN @sort_order = 'ASC' AND @sort_column = '<column>' THEN <column> END ASC, CASE WHEN @sort_order = 'DESC' AND @sort_column = '<column>' THEN <column> END DESC

8
ответ дан LarsW 15 October 2019 в 15:44
поделиться

Я сделал что-то подобное

select productId, InventoryCount, 
    case 
    when @Direction = 1 then InventoryCount 
    else -InventoryCount 
    end as "SortOrder"
order by 3
1
ответ дан 28 November 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: