2017-04-10 2 views
0

誰もが以下の問題を解決するために、ここで私を助けることができ、SQLクエリ

SQLを使用して、私はため、出力は(私はケースを書きたい場合、または他のロジックので、ここだけ

**SERVICES** 
Row 1 : 50|100|128 
Row 2 : 100|100|128 

として良い取り組んでいる

LISTAGG(G.IGROUP_ID,'|') WITHIN GROUP (ORDER BY G.igroup_id) AS SERVICES 

をやっている50の場合| 100 | 128 )それははいのように反映する必要があります100 | 100 | 128それから反映する必要がありますいいえ

あなたが私を助けてくれますか?

あなたは listagg()caseでこれを行うことができます
+0

使用をcaseを適用することができますlistaggは、これがoracleのためのものであることを示しています。私はmysqlタグを削除し、Oracleを追加しました。 –

+0

質問を編集し、サンプルデータと希望の結果を提供してください。 –

答えて

2

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句を追加してください。

EDIT:

質問の文字通りの解釈は示唆している:

(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 
+0

ありがとう@ゴードン、それはチャームのように動作し、ちょうど知識を得たいと思っています。私はケースのように、Exのように'50 | 100% 'のように使うことができますか?YESと' 100 | 100% 'THEN NO。私はこの方法を作りたかった – Batman

+0

'CASE Col1 LIKE '50 | 100% 'THEN' 0''がうまくいく –

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を維持し、外側のクエリで `の