[英]Find duplicates in CONCAT DB2
TempTable(Ncol1, Ncol2) as
(SELECT
col1,
SUBSTR(xmlserialize(xmlagg(xmltext(CONCAT( ', ', col2))) as VARCHAR(1024)), 3) AS ConcatCol2
FROM Table A
WHERE A.col2 IN ('A','B','C','D')
and A.Date >= (select FirstDayMonth from dates)
GROUP BY A.col1)
在表 A 中,列 col2 具有如下值:
A
B
C
D
我有上面的代碼,像這個ABCD
這樣的concat
但它只重復一個像這樣的值ABCDD
。 我在子查詢中嘗試了 DISTINCT ,就像我在此處的另一個主題中讀到的那樣,但是其他解決方案是什么?
謝謝!
試試LISTAGG(DISTINCT )
CREATE TABLE T(C VARCHAR(32))
INSERT INTO T VALUES ('A'),('B'),('B'),('C')
SELECT LISTAGG(DISTINCT C) WITHIN GROUP ( ORDER BY C) FROM T
將返回
1
------
ABC
您需要使用 DB2 11.1 或更高版本才能使用LISTAGG
中的DISTINCT
選項
使用LISTAGG(DISTINCT
時, ORDER BY
需要與 LISTAGG 子句相同
所以這有效
SELECT
col1
, LISTAGG(DISTINCT CONCAT( ', ', col2)) WITHIN GROUP
(ORDER BY CONCAT( ', ', col2))
FROM TableA
WHERE
col2 IN ('A','B','C','D')
GROUP BY
col1
但是這個
SELECT
col1
, LISTAGG(DISTINCT CONCAT( ', ', col2)) WITHIN GROUP
(ORDER BY col2 )
FROM TableA
WHERE
col2 IN ('A','B','C','D')
GROUP BY
col1
得到
以下 position 中的 ORDER BY 子句中的表達式,或“ORDER BY”子句中以“CONCAT...”開頭的表達式無效。 原因代碼 =“2”.. SQLCODE=-214,SQLSTATE=42822
並且,正如預期的那樣,這在LISTAGG的手冊頁中有所說明
如果為 LISTAGG 指定了 DISTINCT,則 ORDER BY 規范的排序鍵必須匹配字符串表達式 (SQLSTATE 42822)。 如果 string-expression 被隱式轉換,則排序鍵必須顯式包含相應的匹配轉換規范。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.