[英]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.