#sql-server #sql-order-by #union
#sql-сервер #sql-order-by #объединение
Вопрос:
у меня есть запрос, подобный этому,
SELECT Col_a, Col_b, 0 AS Col_c FROM table1
WHERE confitions
UNION
SELECT Col_a, NULL AS Col_b, Col_c FROM table2
WHERE confitions
ORDER BY CASE WHEN Col_a='Other' THEN 1 ELSE 0 END ,
Col_a
но когда я запускаю этот запрос, он выдает мне ошибку: ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator. Severity 16
и если я удалю case
инструкцию, она будет работать нормально, может ли кто-нибудь помочь мне решить эту проблему, заранее спасибо.
Ответ №1:
Используйте внутренний запрос:
SELECT * FROM (
SELECT Col_a, Col_b, 0 AS Col_c FROM table1
WHERE conditions
UNION
SELECT Col_a, NULL AS Col_b, Col_c FROM table2
WHERE conditions
) x
ORDER BY CASE WHEN Col_a='Other' THEN 1 ELSE 0 END, Col_a
Ответ №2:
Делайте то, что он говорит вам, чтобы исправить это:
SELECT Col_a, Col_b, 0 AS Col_c,
CASE WHEN Col_a='Other' THEN 1 ELSE 0 END as p
FROM table1
WHERE confitions
UNION
SELECT Col_a, NULL AS Col_b, Col_c,
CASE WHEN Col_a='Other' THEN 1 ELSE 0 END
FROM table2
WHERE confitions
ORDER p , Col_a
Комментарии:
1. Я пробовал это, но у меня не сработало : ( , возможно, я не использовал псевдоним, поскольку вы использовали p, спасибо и 1 за совет.