【发布时间】:2013-07-30 00:27:26
【问题描述】:
我收到错误:
如果指定了 SELECT DISTINCT,则 ORDER BY 项目必须出现在选择列表中。
对于这个查询:
SELECT DISTINCT
[Theme].[Name], [ThemeType].[Type]
FROM
[Theme]
LEFT OUTER JOIN
[ThemeType] ON [Theme].[ThemeTypeId] = [ThemeType].[PK_ThemeType]
JOIN
[ProductTheme] ON [ProductTheme].[ThemeId]=[Theme].[PK_Theme]
WHERE
ProductTheme.ProductID LIKE '%'
AND ProductTheme.ThemeId = Theme.PK_Theme
AND COALESCE([THEME].[THEMETYPEID], 'null') LIKE '%[0-9]%'
ORDER BY
CASE WHEN [THEMETYPE].[TYPE] IS NULL
THEN 0
ELSE 1
END, [THEMETYPE].[TYPE]
我已经研究过了,不定义案例似乎是一个常见问题,但我确实这样做了。我做错了什么?
【问题讨论】:
-
@David:尝试将 ORDER BY 中的整个 CASE 语句也包含到 SELECT 中
-
您的
ThemeType.Type列有哪些值?您能否在SELECT和ORDER BY子句中使用ISNULL(ThemeType.Type, -99999)之类的东西来确保NULLs 排在第一位? -
我不明白
CASE表达式的用途。NULLs 不会先排序吗? -
所以您希望空值在输出中排序但不显示为 1 或 0?看来您应该将案例放在选择列表中,然后按此排序。
-
您现有的查询根本没有按 [主题].[名称] 排序。
标签: sql sql-server