任何人都可以帮我解决下面的问题,
我想同时将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)它应该反映为是,否则如果100 | 100 | 128那么它应该反映为否
你能帮我解决这个问题。答案 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