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

时间:2015-12-10 08:14:09

标签: sql db2 sql-order-by case

我在从表

获取不同记录时遇到问题

我的查询:

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

错误:[SQL01214] ORDER BY EXPRESSION无效 错误详情:https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.1.0/com.ibm.db2.udb.msg.doc/doc/sql0214.htm

我尝试编写子查询和核心子查询,但没有运气

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

2 个答案:

答案 0 :(得分:1)

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

  

在select子句中指定了DISTINCT,并且表达式不能与选择列表中的表达式完全匹配。仅当子句类型为ORDER BY时才会出现此原因代码。

换句话说,您在public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); FillTable(); DataContext = this; } 字段上使用了DISTINCT,但之后也尝试在name子句中使用name

您可以尝试使用以下子查询来解决ORDER BY关键字的潜在问题:

DISTINCT

答案 1 :(得分: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