通过在 DB2 中使用 CASE 语句来区分顺序失败

Distinct failing with order by having CASE statment in DB2

我在从 table

获取不同记录时遇到问题

我的查询:

SELECT DISTINCT name FROM employee WHERE name LIKE '%S%'
ORDER BY 
    CASE WHEN name LIKE 'S%' THEN 0 else 1 end,name

错误:[SQL01214]按表达式排序无效
错误详情:https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.1.0/com.ibm.db2.udb.msg.doc/doc/sql0214.htm

我尝试编写子查询和相关子查询,但没有成功

需要帮助来获得备用 SQL 查询..

根据您提供的documentation link from IBM,您的错误似乎是由以下情况引起的:

DISTINCT is specified in the select clause and the expression cannot be matched exactly with an expression in the select list. This reason code occurs only when clause-type is 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

使用通用 table 表达式按不同 select 中的 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