此查询产生错误:“如果语句包含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
答案 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
)