在Sql Server中使用Union的order by子句

时间:2013-08-14 07:10:06

标签: 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.

当我使用order by Name时,它会显示在结果下方。

2   AAKASH & CO.
0   All
3   SHAH & CO.
1   SHIV ELECTRONICS

但是,我希望第一个选项为“全部”,然后按排序顺序列出缔约方列表。 我怎么能这样做?

3 个答案:

答案 0 :(得分:34)

您需要在CASE子句中使用ORDER BY子查询,如下所示:

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 |             NAME |
------------------------------
|       0 |              All |
|       2 |     AAKASH & CO. |
|       3 |       SHAH & CO. |
|       1 | SHIV ELECTRONICS |

请参阅this SQLFiddle

答案 1 :(得分:2)

您可以按'顺序使用'以这种方式在工会中进行最高级的指导:

Select 0 PartyId, 'All' Name
Union
select * from ( 
  select top (select count(*) from PartyMst) PartyId, Name
  from PartyMst
  order by Name
)

答案 2 :(得分:1)

由于你无论如何硬编码0,所以只需在All

之前添加一个空格
Select 0 PartyId, ' All' Name
Union
select PartyId, Name
from PartyMst
ORDER BY Name

SQL FIDDLE

拉​​吉