SQLで類似の行を連結するのに1日以上を費やしました。SQL(I)の行を連結する方法
私はSquirrel SQLクライアント3.6を使用してクエリを実行しています。以下は、私が複数のテーブルから行を取得するために使用したクエリです。
select
A.NACCES as NACCES,
(CASE WHEN A.CLNKTYP = 1 THEN 'must' WHEN A..CLNKTYP = 2 THEN 'not' ELSE 'NONEED' END) as Link,
B.NPART as part
from
HPL.KACCST B, HPL.KAMCLT A, HPL.KCACMT C
where
A.NMOD = '1212'
and C.NMOD = A.NMOD
and C.NSALGNP = '223'
and C.NCUST = ''
and C.NACCES = A.NACCES
and B.NACCES = A.NACCES_LINK
結果が
NACCES Link part
1 must a
1 not b
1 not c
2 must d
2 must e so on...
今、私はNACCESとリンク列に基づいて一部の列を連結する必要があります。..
である私は、スタックオーバーフローで、この上のいくつかの記事を見ていると私はFORみましたXML PATHクエリですが、運はありません。
SELECT
P.accessory,
P.Link,
STUFF((SELECT DISTINCT ',' + S.part
FROM (SELECT A.NACCES as NACCES,
(CASE
WHEN A.CLNKTYP = 1 THEN 'must' WHEN A..CLNKTYP = 2 THEN 'not' ELSE 'NONEED'
END) as Link,
B.NPART as part
FROM HPL.KACCST B, HPL.KAMCLT A, HPL.KCACMT C
WHERE A.NMOD = '1212' AND C.NMOD = A.NMOD AND C.NSALGNP = '223'
AND C.NCUST = '' AND C.NACCES = A.NACCES AND B.NACCES = A.NACCES_LINK) AS S
WHERE S.NACCES = P.NACCES
AND S.Link = P.Link
FOR XML PATH('')), 1, 1, '') AS PART
FROM
(SELECT
A.NACCES as NACCES,
(CASE WHEN A.CLNKTYP = 1 THEN 'must' WHEN A..CLNKTYP = 2 THEN 'not' ELSE 'NONEED' END) as Link,
B.NPART as part
FROM
HPL.KACCST B, HPL.KAMCLT A, HPL.KCACMT C
WHERE
A.NMOD = '1212'
AND C.NMOD = A.NMOD
AND C.NSALGNP = '223'
AND C.NCUST = ''
AND C.NACCES = A.NACCES
AND B.NACCES = A.NACCES_LINK) AS P
GROUP BY
P.NACCES, P.Link
ERROR:
DB2 SQL Error: SQLCODE=-199, SQLSTATE=42601, SQLERRMC=FOR;;(. AT
MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MINUTE, DRIVER=3.53.95
SQLState: 42601ErrorCode: -199
Error: DB2 SQL Error: SQLCODE=-514, SQLSTATE=26501, SQLERRMC=SQL_CURLH200C1, DRIVER=3.53.95
SQLState: 26501
ErrorCode: -514
私はリスのツールでも、GROUP_CONCATてみました、私はGROUP_CONCATが利用可能エラーではありません取得しています。
私はクエリを実行するためにリスを使用していますメモしておきますと、私はこれを実行しないXML構文の原因を期待してください。
私はCOALESCEと試みたが、これもうまくいきませんでした。私を助けてください。
[悪い習慣をキックする:使用して古いスタイルなJOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- ANSI - ** 92 ** SQL標準(** 20年以上**)の*正しい* ANSI 'JOIN'構文で置き換えられた古いスタイルの*カンマ区切りのテーブル*前に)、その使用はお勧めしません。 –
確かに私はそれらの古いスタイルの結合を避けるでしょう。しかし今、それは私の心配ではありません。 @marc_s – pravallika
DB2に 'listagg()'があります。https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc /doc/r0058709.html –