【发布时间】:2017-02-17 00:41:36
【问题描述】:
我正在尝试按结果的描述(不是 id)对结果列表进行排序,但我还需要插入另一个带有空 Id 和描述为“ALL”的结果。
为此,我使用UNION SELECT NULL, 'ALL'
这应该是一个非常简单的查询,但我不知道如何在查询对实际结果集进行排序之前插入“ALL”。
这是我目前所拥有的:
SELECT *
FROM [dbo].[HouseType]
WHERE [TypeId] = COALESCE(@TypeId, [TypeId])
UNION SELECT NULL, 'ALL'
ORDER BY [TypeDesc]
我也尝试在结果排序之前调用 UNION SELECT,但看起来 SQL 不允许这样做。
UNION SELECT NULL, 'ALL'
SELECT * FROM
(
SELECT *
FROM [dbo].[HouseType]
WHERE [TypeId] = COALESCE(@TypeId, [TypeId])
ORDER BY [TypeDesc]
)types
基本上我想看到以下结果(有序):
- 全部
- 平房
- 分离
- 半独立式
- 露台
【问题讨论】:
-
问题可能是通配符
*选择的列比您在UNION 中的显式选择中提到的要多 -
插入表格。插入 ALL,然后从中选择并订购结果。
-
@GurV 在使用第二条语句时它给了我以下信息“ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非 TOP 或 FOR XML 也是指定。”
-
既然所有排序首先第一个应该工作。尝试实际的列名。
标签: sql sql-server tsql union