基于行实例返回查询的 SQL 案例语句
Posted
技术标签:
【中文标题】基于行实例返回查询的 SQL 案例语句【英文标题】:SQL case statement that returns query based on instances of a row 【发布时间】:2015-09-18 19:32:36 【问题描述】:我正在尝试编写一个子查询来计算“TRACE_NO”的数量,如果只有一个实例,我希望它显示原始字符串。但是,如果它有多个“TRACE_NO”实例,我希望该行显示“重复”。我究竟做错了什么?
SELECT
SL.FILE_NO AS FILE,
(SELECT CASE(WHEN TR.TRACE_NO HAVING COUNT(*) >1 THEN 'DUPLICATE' ELSE
TR.TRACE_NO)
FROM IASDB.TRACE_DETAIL TR
WHERE SL.INVOICE_NO = TR.INVOICE_NO
AND TR.TRACE_TYPE IN 'XX') AS XX
表格
FILE XX
1120 | SEA
1315 | SDF
1251 | SEA
1251 | GEG
1991 | ATL
1235 | BOI
1235 | CVG
期望的输出:
FILE | XX
1120 | SEA
1315 | SDF
1251 | DUPLICATE
1991 | ATL
1235 | DUPLICATE
【问题讨论】:
您的外部查询没有FROM
子句并且SL
未定义。
这是定义 SL 的较大查询的一部分。这只是一个sn-p。谢谢
【参考方案1】:
假设这是更大查询的一部分,这可能是您想要的逻辑:
SELECT SL.FILE_NO AS FILE,
(SELECT CASE WHEN COUNT(*) > 1 THEN 'DUPLICATE' ELSE MIN(TR.TRACE_NO) END
FROM IASDB.TRACE_DETAIL TR
WHERE SL.INVOICE_NO = TR.INVOICE_NO AND TR.TRACE_TYPE IN 'XX'
) AS XX
【讨论】:
是的,它是更大查询的一部分。我试过了,但它给了我这个错误错误代码:-104,SQL 状态:42601] DB2 SQL 错误:SQLCODE=-104,SQLSTATE=42601,SQLERRMC=*) > 1 THEN 'DUPLICATE' ELSE MIN(;ECT CASE( WHEN COUNT(;尝试在包装查询中使用您的逻辑来实现这一点,如下所示:
SELECT
FILE,
CASE
WHEN CNT = 1 THEN TRACE_NO
ELSE 'DUPLICATE'
END AS XX
FROM (
SELECT SL.FILE_NO AS FILE, TR.TRACE_NO, COUNT(*) as CNT
FROM IASDB.TRACE_DETAIL TR
GROUP BY SL.FILE_NO AS, TR.TRACE_NO
)
【讨论】:
以上是关于基于行实例返回查询的 SQL 案例语句的主要内容,如果未能解决你的问题,请参考以下文章