15

我想要数据库中第一个选项为“全部”的方名称列表。但我不会将“全部”插入数据库,只需要检索时间。所以,我写了这个查询。

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

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

4

3 回答 3

38

您需要使用带有CASEinORDER 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

输出:

派对ID 姓名
0 全部
2 阿卡什公司
3 沙赫公司
1 希夫电子

看到这个 SQLFiddle

于 2013-08-14T07:17:38.240 回答
1

由于您无论如何都在硬编码 0,所以 All 只需在 All 之前添加一个空格

Select 0 PartyId, ' All' Name
Union
select PartyId, Name
from PartyMst
ORDER BY Name

SQL 小提琴

拉吉

于 2013-08-14T07:24:39.430 回答
1

您可以通过以下方式将“order by”与联合中的顶级指令一起使用:

Select 0 PartyId, 'All' Name
Union
select * from ( 
  select top (select count(*) from PartyMst) PartyId, Name
  from PartyMst
  order by Name
)
于 2014-04-23T02:15:56.333 回答