Упорядочить с помощью регистра и объединения в Sql Server

#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 за совет.