基于行实例返回查询的 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(;, DRIVER=4.13.127. 2) [错误代码:-727,SQL 状态:56098] DB2 SQL 错误:SQLCODE=-727,SQLSTATE=56098,SQLERRMC=2;-104;42601; *) > 1 THEN 'DUPLICATE' ELSE MIN(|ECT CASE(WHEN COUNT(| 【参考方案2】:

尝试在包装查询中使用您的逻辑来实现这一点,如下所示:

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 案例语句的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 数据库 - sql语句筛选出符合查询条件的第一条结果实例演示,sql查询结果只显示指定行数的数据方法

SQL语句关键词以及实例

vs2008中如何利用sql语句?

MYSQL 游标学习及使用实例

怎么使用JAVA连接数据库?

django学习第九天