Sql Server中带Union的Order by子句
我想要数据库中第一个选项为“全部”的参与方名称列表。但我不会将“全部”插入数据库,只需要检索时间。所以,我写了这个查询Sql Server中带Union的Order by子句,sql,sql-server,sql-order-by,union,Sql,Sql Server,Sql Order By,Union,我想要数据库中第一个选项为“全部”的参与方名称列表。但我不会将“全部”插入数据库,只需要检索时间。所以,我写了这个查询 Select 0 PartyId, 'All' Name Union select PartyId, Name from PartyMst 这是我的结果 0 All 1 SHIV ELECTRONICS 2 AAKASH & CO. 3 SHAH & CO. 当我使用orderbyname时,它会显示以下结果 2 AAKASH &
Select 0 PartyId, 'All' Name
Union
select PartyId, Name
from PartyMst
这是我的结果
0 All
1 SHIV ELECTRONICS
2 AAKASH & CO.
3 SHAH & CO.
当我使用orderbyname
时,它会显示以下结果
2 AAKASH & CO.
0 All
3 SHAH & CO.
1 SHIV ELECTRONICS
但是,我希望第一个选项为“全部”,然后按排序顺序列出各方。
如何执行此操作?您需要在
ORDER BY
子句中使用带有CASE
的子查询,如下所示:
SELECT * FROM
(
Select 0 PartyId, 'All' Name
Union
select PartyId, Name
from PartyMst
) tbl
ORDER BY CASE WHEN PartyId = 0 THEN 0 ELSE 1 END
,Name
输出:
PARTYID
名称
0
全部的
2.
阿卡什公司。
3.
沙阿公司。
1.
希夫电子
因为您无论如何都是硬编码0,所以All只需在All之前添加一个空格
Select 0 PartyId, ' All' Name
Union
select PartyId, Name
from PartyMst
ORDER BY Name
Raj您可以通过以下方式在联合体中使用带有顶部说明的“订单依据”:
Select 0 PartyId, 'All' Name
Union
select * from (
select top (select count(*) from PartyMst) PartyId, Name
from PartyMst
order by Name
)
我试过2008 R2和2012。它甚至可以在我发布的SQL Fiddle链接中使用。不知道为什么它不适合你。总之,@hims056的回复更好。它通过在fiddle中检查来显示书面答案。但不是在sql server 2008中。。我还想知道..正如前面所评论的,对我来说,它也可以在SQL Server中工作。