我有这个查询:
SELECT DISTINCT *
FROM
(SELECT h.ID, h.Title
FROM table1 h
LEFT JOIN table2 k ON h.ID = k.MediaID) a
ORDER BY
CASE
WHEN 1 = 1 THEN a.Title
ELSE a.ID
END ASC
我的表格是这样的:
表1
id | title
---+------
1 | aaaaa
2 | bbbb
3 | ccc
4 | ddddd
表2
id | mediaId
---+---------
1 | 2
2 | 2
3 | 4
4 | 1
当我运行此查询时,出现此错误:
ORDER BY items must appear in the select list if SELECT DISTINCT is specified.
这段代码有什么问题?
如果我删除Else
,它就可以正常工作
最佳答案
case
表达式返回具有单一类型的单个值。您正在混合类型,因此会出现错误。 SQL 规则规定在这种情况下字符串会转换为数字——这就是错误发生的地方。
简单的解决方案是两个表达式:
1 = 1
相当神秘。这通常是这样的:
order by (case when @var = 1 then a.title end),
(case when @var = 2 then null else a.id end)
您可以通过显式转换来消除错误:
order by (case when 1 = 1 then a.title end),
else cast(a.id as varchar(255)
end)
但是,对于第二种情况,这不会对数据进行数字排序。
关于sql - ORDER BY 在使用 Case When 运行查询时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60464071/