私はそうのようなクエリがある:OracleのSQLのカンマで区切られたID
SELECT
s.id,
CASE
WHEN INSTR(s.strain_value, '[') = 0
THEN s.strain_name
ELSE TRIM(SUBSTR(s.strain_name, 1, INSTR(s.strain_name, '[')-1))
END AS strain_name
FROM strain s
はこれが私のように見えるテーブルを与える:
id strain_name
----------------------------------------------
100 CD-1
101 CD-1
102 CD-1
200 SCID
300 BusIp-hy
301 BusIp-hy
... ...
今、私はグループにstrain_name
ことで結果の表を望んでいましたそして、次のようにカンマで区切ったid
を得る:
id strain_name
----------------------------------------------
100, 101, 102 CD-1
200 SCID
300, 301 BusIp-hy
... ...
私はこのクエリを試してみたが、私はありませんよtは私が欲しかったものを得る:
WITH q AS (
SELECT
s.id,
CASE
WHEN INSTR(s.strain_name, '[') = 0
THEN s.strain_name
ELSE TRIM(SUBSTR(s.strain_name, 1, INSTR(s.strain_name, '[')-1))
END AS strain_name
FROM strain s
)
SELECT (
SELECT LISTAGG(id, ', ')
WITHIN GROUP (
ORDER BY strain_name ASC
)
FROM (SELECT DISTINCT strain_name FROM q) dc
) AS id, strain_name
FROM q
あなたは、私は、各strain_name
についてid
のカンマ区切りのリストを取得することができるように、私は最後のクエリを修正する助けてくださいことはできますか?
おかげで、これは私のために動作します。なぜあなたが 'ORDER BY'を' strain_name'から 'id'に変更しなければならないのか疑問に思っていますか? –
@PatrickGregorio期待どおりの結果から、カンマ区切りのIDを昇順に並べ替えたいと思うようです。 'LISTAGG'の' ORDER BY'はグループの中にありますので、すべての項目は同じ 'strain_name'を持ちます(group by節であるため) - 順序を使用することで[非決定論的順序付け] (http://stackoverflow.com/q/35747417/1509264)、 'id'の値はすべて異なっているように見え、決定的な順序になります。 – MT0