带有LISTAGG和CASE语句的SQL查询

时间:2017-04-10 12:53:53

标签: sql oracle case listagg

任何人都可以帮我解决下面的问题,

我想同时将CASELISTAGG一起使用。

使用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)它应该反映为是,否则如果100 | 100 | 128那么它应该反映为否

你能帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

您可以使用case中的listagg()

执行此操作
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

答案 1 :(得分:0)

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