以下查询返回我想要显示空值的区域列表,该值为'--- 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
答案 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
。我认为虽然它增加了查询的可读性。