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中工作。