在“订购”

时间:2018-01-31 21:52:00

标签: sql sql-server

此查询产生错误:“如果语句包含UNION,则ORDER BY项必须出现在选择列表中......”

我订购的唯一商品是名称,它位于选择列表中。我猜CASE需要额外的语法。在这种情况下的案例确保首先列出这两个名称。第二个Select首先添加一个空白字段。

 SELECT Name FROM Name 
 UNION 
 SELECT ''
 ORDER BY   
 CASE Name 
 WHEN 'John' THEN 1 
 WHEN 'Frank' THEN 2 
 ELSE 3 END

3 个答案:

答案 0 :(得分:0)

错误消息非常明确。如何使用子查询?

SELECT n.*
FROM (SELECT Name FROM Name 
      UNION 
      SELECT ''
     ) n
ORDER BY (CASE Name 
             WHEN 'John' THEN 1 
             WHEN 'Frank' THEN 2 
             ELSE 3
          END);

如果您的表格没有重复项,则应使用UNION ALL代替UNION

答案 1 :(得分:0)

或者只是将其作为单独的字段包含在您的查询中

SELECT Name, 
       CASE Name 
           WHEN 'John' THEN 1 
           WHEN 'Frank' THEN 2 
           ELSE 3 END as Order 
FROM Name 
 UNION 
 SELECT '', 3
 ORDER BY Order

答案 2 :(得分:0)

create table ##t (nname nvarchar(100) not null);

insert into ##t
values 
    ('tom'),
    ('dick'),
    ('harry');

select nname 
from ( select nname 
       from ##t 
       union
       select '' 
     ) tt
 order by ( case nname 
                WHEN ''     THEN 0 
                WHEN 'tom'  THEN 1 
                WHEN 'dick' THEN 2 
                ELSE 3 
           END
         )