使用 LISTAGG 和 CASE 语句的 SQL 查询
Posted
技术标签:
【中文标题】使用 LISTAGG 和 CASE 语句的 SQL 查询【英文标题】:SQL Query with LISTAGG and CASE Statement 【发布时间】:2017-04-10 12:53:52 【问题描述】:谁能帮我解决以下问题,
我想同时使用CASE
和LISTAGG
。
我正在使用 sql
LISTAGG(G.IGROUP_ID,'|') WITHIN GROUP (ORDER BY G.igroup_id) AS SERVICES
所以输出只是正常工作
**SERVICES**
Row 1 : 50|100|128
Row 2 : 100|100|128
所以在这里我想写一个案例或 if else 逻辑(如果 50|100|128)它应该反映为 Yes else if 100|100|128 那么它应该反映为 No
你能帮我解决这个问题吗?
【问题讨论】:
使用listagg
表明这是针对oracle 的。我删除了 mysql 标签并添加了 oracle。
编辑您的问题并提供示例数据和所需的结果。
【参考方案1】:
您可以使用listagg()
中的case
执行此操作:
LISTAGG(CASE WHEN G.IGROUP_ID IN (50, 100, 128) THEN 'YES' ELSE 'NO' END ,'|')
WITHIN GROUP (ORDER BY G.igroup_id) AS SERVICES
这假定所有不是YES
的都是NO
。如果这不是真的,那么只需添加另一个 WHEN
子句。
编辑:
对这个问题的字面解释是:
(CASE LISTAGG(G.IGROUP_ID , '|') WITHIN GROUP (ORDER BY G.igroup_id)
WHEN '50|100|128' THEN 'Yes'
WHEN '100|100|128' THEN 'No'
END) AS SERVICES
【讨论】:
谢谢@Gordon,它的工作原理就像 Charm,只是想获得一些知识,无论如何我可以在 Case 中使用 Like ,例如,像 '50|100%' THEN 作为 YES 和 '100| 100%' 那么没有。我想以这种方式制作 END) 第一个 SQL 中的 END 之后不应出现右括号 @deadend 。 . .谢谢。【参考方案2】:CASE WHEN LISTAGG(G.IGROUP_ID,'|') WITHIN GROUP (ORDER BY G.igroup_id) = '50|100|128' THEN 'YES'
WHEN LISTAGG(G.IGROUP_ID,'|') WITHIN GROUP (ORDER BY G.igroup_id) = '100|100|128' THEN 'NO' END AS COL_NAME
或者您可以将LISTAGG(G.IGROUP_ID,'|') WITHIN GROUP (ORDER BY G.igroup_id) AS SERVICES
保留在子查询中,并在外部查询中应用case
【讨论】:
以上是关于使用 LISTAGG 和 CASE 语句的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL ORA-00907: CASE 语句中缺少右括号错误