在DB2中,使用CASE语句进行排序时,会出现Distinct失败的情况。

3

你能分享一下你尝试过的带子查询的SQL语句以及它产生的错误吗? - Mureinik
SELECT name FROM employee WHERE name IN ( SELECT DISTINCT name FROM employee WHERE name LIKE '%S%') ORDER BY CASE WHEN name like 'S%' then 0 else 1, name -- 相同错误 - Sks
嗨,Sham,请看一下我的答案。也许这两个选项中的一个能让你恢复正常工作。 - Tim Biegeleisen
2个回答

2
根据您提供的IBM文档链接,您的错误似乎是由以下条件引起的:

在选择子句中指定了DISTINCT,并且表达式无法与选择列表中的表达式完全匹配。当clause-type为ORDER BY时才会出现此原因代码。

换句话说,您在name字段上使用了DISTINCT,但随后又尝试在ORDER BY子句中使用name
您可以尝试使用以下子查询来解决DISTINCT关键字可能出现的问题:
SELECT t.name
FROM
(
    SELECT DISTINCT name FROM employee WHERE name LIKE '%S%'
) t
ORDER BY
    CASE WHEN t.name LIKE 'S%' THEN 0 else 1 end, t.name

谢谢Tim的快速回复,第二个查询对我有用 :) - Sks

0
使用公共表达式在不同的选择中按照 case 语句排序。
with cte as (
SELECT DISTINCT name FROM employee WHERE name LIKE '%S%'
)
select * from cte
ORDER BY 
    CASE WHEN name LIKE 'S%' THEN 0 else 1 end,name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接