Я наткнулся на предложение здесь (SQL: ORDER BY using a substring within a specific column... possible?), которое показывает оператор CASE, возвращающий целые числа внутри предложения ORDER BY в таблице с 4 столбцами.MSSQL - делает оператор CASE в ORDER BY возвратом столбцов столбцов?
SELECT npID, title, URL, issue
FROM tbl
ORDER BY substring(issue, 1, 4) DESC
,CASE
WHEN substring(issue, 6, 100) IN ('Winter','First_Quarter') THEN 1
WHEN substring(issue, 6, 100) IN ('Summer','Second_Quarter') THEN 2
WHEN substring(issue, 6, 100) IN ('Spring','Third_Quarter') THEN 3
WHEN substring(issue, 6, 100) IN ('Fall', 'Fourth Quarter') THEN 4
ELSE 5
END;
Я не понимаю, как это работает. Очевидно, что целые числа, являющиеся результатом CASE, НЕ являются столбцами (например, ELSE 5, так как таблица имеет только 4 столбца). Но что они означают? - Контекст заставляет его казаться, что они предназначены для использования THEMSELVES для заказа, но я никогда не видел таких вещей в ORDER BY. (Однако пример, приведенный в сообщении, работает, поэтому я действительно озадачен.) Может ли кто-нибудь объяснить, что значит возвращать целые числа внутри оператора CASE внутри предложения ORDER BY? Спасибо.
'ORDER BY' принимает список столбцов по имени или порядку * или * выражение - как в вашем' CASE', которое оценивается для каждой строки в наборе результатов, каждая оценка возвращает целое число в диапазоне от 1 до 5 и это значение используется как ключ сортировки. –
AlexK - Я до сих пор не понимаю. Вы говорите «порядковый номер или выражение». Как двигатель говорит разницу между порядковым номером (который, в конце концов, является выражением) и «выражением»? – user1693404
Если его единственный целочисленный литерал, такой как '5', его порядковый номер - единственный способ указать один,' порядок 1 + 1'/'порядок by @ int_var' приведет к возникновению ошибок. –