首先按特定值排序,然后按顺序显示所有其余值

时间:2017-04-26 06:50:33

标签: sql sql-server

以下查询返回我想要显示空值的区域列表,该值为'--- All ----',然后是其余值。

外出将是

AreaID  AreaName
Null    '--- All ----'
1       area1
2       area2

等。

查询

SELECT
dbo.Areas.AreaID,
dbo.Areas.AreaName
FROM dbo.Areas
UNION
SELECT
NULL,
'--- All ----'
ORDER BY dbo.Areas.AreaName

2 个答案:

答案 0 :(得分:1)

一种选择是使用CASE表达式将NULL记录放在结果集中的第一位。在应用第一个条件后,您还可以添加第二个排序条件以对区域名称进行排序。

SELECT
    dbo.Areas.AreaID,
    dbo.Areas.AreaName
FROM dbo.Areas
UNION
SELECT
    NULL,
    '--- All ----'
ORDER BY CASE WHEN dbo.Areas.AreaID IS NULL THEN 0 ELSE 1 END,
         dbo.Areas.AreaName

答案 1 :(得分:0)

试试这个:

SELECT AreaID,
       AreaName
FROM (
   SELECT dbo.Areas.AreaID,
          dbo.Areas.AreaName
   FROM dbo.Areas

   UNION

   SELECT NULL,
          '--- All ----'
) AS t
ORDER BY CASE 
            WHEN AreaID IS NULL THEN 1
            ELSE 2
         END,
         AreaName  

注意:不需要使用嵌套的派生表,因为它足以像在查询中一样使用ORDER BY。我认为虽然它增加了查询的可读性。