Teradata SQL - 是否可以列出同一单元格中 Where 条件的所有匹配项,并用逗号分隔?
Teradata SQL - Is it possible to list all matches from Where condition in same cell separated by a comma?
我正在尝试将同一个 VISIT_DATE 中的多个 PROCEDURE_CODE 放入同一行的同一单元格中。这个查询只得到 18 PROCEDURE_CODES,而应该有 21 个,因为三个相同的 VISIT_DATEs 有两个 PROCEDURE_CODES。我得到第一个结果,而不是两个。我的查询是:
With Office_Visit as
(
SELECT
TRIM(LEADING '-' FROM CAST(Pro_A.MEMBER_ID AS VARCHAR(20))) "MEMBER ID"
,Pro_A.VISIT_DATE "Date of Service"
,Pro_A.LOCATION Location
,row_number() over ( order by Pro_A.PROCEDURE_CODE ) as "Code(s)"
FROM CLAIMS.PROFESSIONAL Pro_A
)
SELECT
TRIM(LEADING '-' FROM CAST(Pro_B.MEMBER_ID AS VARCHAR(20))) "MEMBER ID"
,Pro_B.VISIT_DATE "Date of Service"
,Pro_B.LOCATION
,TRIM(TRAILING ',' FROM (XMLAGG(TRIM(Pro_B.PROCEDURE_CODE)|| ',' ORDER BY Pro_B.VISIT_DATE) (VARCHAR(100)))) "Procedure Code(s)"
FROM CLAIMS.PROFESSIONAL Pro_B
WHERE
TRIM(LEADING '-' FROM CAST(Pro_B.MEMBER_ID AS VARCHAR(20))) = 'MEMBER001'
AND Pro_B.LOCATION = 'OFFICE'
AND Pro_B.PROCEDURE_CODE IN ('99201', '99202', '99203', '99204', '99205', '99211', '99212', '99213', '99214', '99215',
'99241', '99242', '99243', '99244', '99245', '99251', '99252', '99253', '99254', '99255', '99354', '99358',
'99366', '99367', '99368', '99381', '99382', '99383', '99384', '99385', '99386', '99387', '99391', '99392',
'99393', '99394', '99395', '99396', '99397', '99401', '99402', '99403', '99404', '99406', '99407', '99408',
'99409', '99411', '99412', '99415', '99415', '99421', '99422', '99423', '99429', '99441', '99442', '99443',
'99450', '99455', '99456', '99483', '99484', '99487', '99490', '99491', '99492', '99493', '99494', '99495',
'99496', '99497', '99499')
AND Pro_B.VISIT_DATE BETWEEN '2018-12-31' AND '2020-01-01'
GROUP BY 1,2,3
我想得到的结果是这样的:
enter image description here
谢谢。
这应该是你想要的,CTE准备了数据包括。 DISTINCT 然后应用 XMLAGG:
WITH Office_Visit AS
(
SELECT DISTINCT
Trim(Leading '-' FROM Cast(Pro_A.MEMBER_ID AS VARCHAR(20))) AS "MEMBER ID"
,Pro_A.VISIT_DATE AS "Date of Service"
,Pro_A.LOCATION AS Location
,Trim(Pro_A.PROCEDURE_CODE) AS PROCEDURE_CODE
FROM CLAIMS.PROFESSIONAL Pro_A
WHERE "MEMBER ID" = 'MEMBER001'
AND Pro_A.LOCATION = 'OFFICE'
AND Pro_A.PROCEDURE_CODE IN ('99201', '99202', '99203', '99204', '99205', '99211', '99212', '99213', '99214', '99215',
'99241', '99242', '99243', '99244', '99245', '99251', '99252', '99253', '99254', '99255', '99354', '99358',
'99366', '99367', '99368', '99381', '99382', '99383', '99384', '99385', '99386', '99387', '99391', '99392',
'99393', '99394', '99395', '99396', '99397', '99401', '99402', '99403', '99404', '99406', '99407', '99408',
'99409', '99411', '99412', '99415', '99415', '99421', '99422', '99423', '99429', '99441', '99442', '99443',
'99450', '99455', '99456', '99483', '99484', '99487', '99490', '99491', '99492', '99493', '99494', '99495',
'99496', '99497', '99499')
AND Pro_A.VISIT_DATE BETWEEN '2018-12-31' AND '2020-01-01'
)
SELECT
"MEMBER ID"
,"Date of Service"
,LOCATION
,Trim(Trailing ',' FROM (XmlAgg(PROCEDURE_CODE|| ',' ORDER BY PROCEDURE_CODE) (VARCHAR(100)))) AS "Procedure Code(s)"
FROM Office_Visit
GROUP BY 1,2,3
我正在尝试将同一个 VISIT_DATE 中的多个 PROCEDURE_CODE 放入同一行的同一单元格中。这个查询只得到 18 PROCEDURE_CODES,而应该有 21 个,因为三个相同的 VISIT_DATEs 有两个 PROCEDURE_CODES。我得到第一个结果,而不是两个。我的查询是:
With Office_Visit as
(
SELECT
TRIM(LEADING '-' FROM CAST(Pro_A.MEMBER_ID AS VARCHAR(20))) "MEMBER ID"
,Pro_A.VISIT_DATE "Date of Service"
,Pro_A.LOCATION Location
,row_number() over ( order by Pro_A.PROCEDURE_CODE ) as "Code(s)"
FROM CLAIMS.PROFESSIONAL Pro_A
)
SELECT
TRIM(LEADING '-' FROM CAST(Pro_B.MEMBER_ID AS VARCHAR(20))) "MEMBER ID"
,Pro_B.VISIT_DATE "Date of Service"
,Pro_B.LOCATION
,TRIM(TRAILING ',' FROM (XMLAGG(TRIM(Pro_B.PROCEDURE_CODE)|| ',' ORDER BY Pro_B.VISIT_DATE) (VARCHAR(100)))) "Procedure Code(s)"
FROM CLAIMS.PROFESSIONAL Pro_B
WHERE
TRIM(LEADING '-' FROM CAST(Pro_B.MEMBER_ID AS VARCHAR(20))) = 'MEMBER001'
AND Pro_B.LOCATION = 'OFFICE'
AND Pro_B.PROCEDURE_CODE IN ('99201', '99202', '99203', '99204', '99205', '99211', '99212', '99213', '99214', '99215',
'99241', '99242', '99243', '99244', '99245', '99251', '99252', '99253', '99254', '99255', '99354', '99358',
'99366', '99367', '99368', '99381', '99382', '99383', '99384', '99385', '99386', '99387', '99391', '99392',
'99393', '99394', '99395', '99396', '99397', '99401', '99402', '99403', '99404', '99406', '99407', '99408',
'99409', '99411', '99412', '99415', '99415', '99421', '99422', '99423', '99429', '99441', '99442', '99443',
'99450', '99455', '99456', '99483', '99484', '99487', '99490', '99491', '99492', '99493', '99494', '99495',
'99496', '99497', '99499')
AND Pro_B.VISIT_DATE BETWEEN '2018-12-31' AND '2020-01-01'
GROUP BY 1,2,3
我想得到的结果是这样的:
enter image description here
谢谢。
这应该是你想要的,CTE准备了数据包括。 DISTINCT 然后应用 XMLAGG:
WITH Office_Visit AS
(
SELECT DISTINCT
Trim(Leading '-' FROM Cast(Pro_A.MEMBER_ID AS VARCHAR(20))) AS "MEMBER ID"
,Pro_A.VISIT_DATE AS "Date of Service"
,Pro_A.LOCATION AS Location
,Trim(Pro_A.PROCEDURE_CODE) AS PROCEDURE_CODE
FROM CLAIMS.PROFESSIONAL Pro_A
WHERE "MEMBER ID" = 'MEMBER001'
AND Pro_A.LOCATION = 'OFFICE'
AND Pro_A.PROCEDURE_CODE IN ('99201', '99202', '99203', '99204', '99205', '99211', '99212', '99213', '99214', '99215',
'99241', '99242', '99243', '99244', '99245', '99251', '99252', '99253', '99254', '99255', '99354', '99358',
'99366', '99367', '99368', '99381', '99382', '99383', '99384', '99385', '99386', '99387', '99391', '99392',
'99393', '99394', '99395', '99396', '99397', '99401', '99402', '99403', '99404', '99406', '99407', '99408',
'99409', '99411', '99412', '99415', '99415', '99421', '99422', '99423', '99429', '99441', '99442', '99443',
'99450', '99455', '99456', '99483', '99484', '99487', '99490', '99491', '99492', '99493', '99494', '99495',
'99496', '99497', '99499')
AND Pro_A.VISIT_DATE BETWEEN '2018-12-31' AND '2020-01-01'
)
SELECT
"MEMBER ID"
,"Date of Service"
,LOCATION
,Trim(Trailing ',' FROM (XmlAgg(PROCEDURE_CODE|| ',' ORDER BY PROCEDURE_CODE) (VARCHAR(100)))) AS "Procedure Code(s)"
FROM Office_Visit
GROUP BY 1,2,3