0

任何人都可以在这里帮助我解决以下问题,

我想同时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)它应该反映为是 else if 100|100|128 那么它应该反映为否

你能帮我解决这个问题吗?

4

2 回答 2

3

您可以使用以下内容执行此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
于 2017-04-10T12:56:12.603 回答
1
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在外部查询中应用

于 2017-04-10T13:00:04.237 回答