[英]Concatenate distinct values from multiple columns
我在桌子上有這個
party1 | party2
A | E
B | D
C | H
D | B
E | A
F | H
G | I
我試圖得到的結果是party1
和party2
的不同串聯,即
AE (will same as EA so only one instance is required)
BD (will same as DB so only one instance is required)
CH
FH
GI
Party1 和 Party2 是使用 CTE 形成的。 各方 AI 來自單表 Party,並使用代碼 4 和 1 的業務邏輯標識為 party1 和 party2。
下面是我可以形成的查詢
WITH CTE AS
(
SELECT
DISTINCT CPR1.PARTY_IDENTIFIER AS PARTY1,
CPR2.PARTY_IDENTIFIER AS PARTY2,
CCR.CLIENT_RELATIONSHIP_TYPE_CODE,
CPR1.CLIENT_TYPE_CODE
FROM GOLD.CLIENT_TO_PARTY_RELATIONSHIP CPR1
JOIN GOLD.CLIENT_TO_CLIENT_RELATIONSHIP CCR
ON CPR1.CLIENT_IDENTIFIER = CCR.CLIENT_IDENTIFIER
AND CCR.CLIENT_RELATIONSHIP_TYPE_CODE = '04'
AND CPR1.CLIENT_TYPE_CODE = '1'
JOIN GOLD.CLIENT_TO_PARTY_RELATIONSHIP CPR2
ON CPR2.CLIENT_IDENTIFIER = CCR.CLIENT_IDENTIFIER
WHERE (CPR1.PARTY_IDENTIFIER_INACTIVE_DATE IS NULL OR CPR1.PARTY_IDENTIFIER_INACTIVE_DATE ='')
AND (CPR2.PARTY_IDENTIFIER_INACTIVE_DATE IS NULL OR CPR2.PARTY_IDENTIFIER_INACTIVE_DATE ='')
AND CPR1.PARTY_IDENTIFIER<>CPR2.PARTY_IDENTIFIER
AND CPR1.DATA_AS_OF_DATE LIKE '201912%'
AND CPR2.DATA_AS_OF_DATE LIKE '201912%'
AND CCR.DATA_AS_OF_DATE LIKE '201912%'
)
SELECT
DISTINCT CONCAT("PG","_",TRIM(CAST(PARTY1 AS STRING)) ,"_",TRIM(CAST(PARTY1 AS STRING))) AS PG_KEY,
party1,
party2
FROM CTE
您的描述說您實際上對串聯不感興趣,而是對由配對數據組成的(2 元素)集合感興趣。 沿以下模板將它們(如您所做的那樣)表示為 2 個字母的字符串 go。
WITH CTE AS
(
SELECT CPR1.PARTY_IDENTIFIER AS PARTY1,
CPR2.PARTY_IDENTIFIER AS PARTY2,
CCR.CLIENT_RELATIONSHIP_TYPE_CODE,
CPR1.CLIENT_TYPE_CODE
FROM GOLD.CLIENT_TO_PARTY_RELATIONSHIP CPR1
JOIN GOLD.CLIENT_TO_CLIENT_RELATIONSHIP CCR
ON CPR1.CLIENT_IDENTIFIER = CCR.CLIENT_IDENTIFIER
AND CCR.CLIENT_RELATIONSHIP_TYPE_CODE = '04'
AND CPR1.CLIENT_TYPE_CODE = '1'
JOIN GOLD.CLIENT_TO_PARTY_RELATIONSHIP CPR2
ON CPR2.CLIENT_IDENTIFIER = CCR.CLIENT_IDENTIFIER
WHERE (CPR1.PARTY_IDENTIFIER_INACTIVE_DATE IS NULL OR CPR1.PARTY_IDENTIFIER_INACTIVE_DATE ='')
AND (CPR2.PARTY_IDENTIFIER_INACTIVE_DATE IS NULL OR CPR2.PARTY_IDENTIFIER_INACTIVE_DATE ='')
AND CPR1.PARTY_IDENTIFIER<>CPR2.PARTY_IDENTIFIER
AND CPR1.DATA_AS_OF_DATE LIKE '201912%'
AND CPR2.DATA_AS_OF_DATE LIKE '201912%'
AND CCR.DATA_AS_OF_DATE LIKE '201912%'
)
select
distinct CASE WHEN party1 < party2
THEN party1 || party2
ELSE party2 || party1
END pair
FROM CTE
;
注意事項
將 CTE 定義拉出子查詢。 Concat 語法可能因您使用的 sql 方言/數據庫產品而異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.