我有这个任务在示例中显示CodeName,并且可能有多个代码用逗号分隔,我尝试使用xml解析但看起来有点不同的情况。在下面的示例代码中,我以简单的方式完成了它,但也许有更好的方式更灵活:
我还在照片中包含了所需的输出。
WITH cte1 AS (
SELECT 'Alpha' Name, 'AA' Code UNION
SELECT 'Bravo' Name, 'AA,BB,CC' Code UNION
SELECT 'Whiskey' Name, NULL Code),
cteLookup AS (
SELECT 'AA' CodeID, 'Avia' CodeName UNION
SELECT 'BB' CodeID, 'Bahamas' CodeName UNION
SELECT 'CC' CodeID, 'Chile' CodeName )
SELECT Name,
Code,
SUBSTRING(Code,1,2) c1,
x1.CodeName + ', ' + ISNULL(x2.CodeName,'') + ', ' + ISNULL(x3.CodeName,'')
FROM Cte1
LEFT JOIN cteLookup x1 ON x1.CodeID = SUBSTRING(Code,1,2)
LEFT JOIN cteLookup x2 ON x2.CodeID = SUBSTRING(Code,4,2)
LEFT JOIN cteLookup x3 ON x3.CodeID = SUBSTRING(Code,7,2)
答案 0 :(得分:2)
WITH cte1 AS (
SELECT 'Alpha' Name, 'AA' Code UNION
SELECT 'Bravo' Name, 'AA,BB,CC' Code UNION
SELECT 'Whiskey' Name, NULL Code),
cteLookup AS (
SELECT 'AA' CodeID, 'Avia' CodeName UNION
SELECT 'BB' CodeID, 'Bahamas' CodeName UNION
SELECT 'CC' CodeID, 'Chile' CodeName )
--
SELECT
A.Name,
A.Code,
LEFT(A.CodeName, LEN(A.CodeName) - 1) AS CodeName
FROM
(
SELECT
C.Name,
C.Code,
(
SELECT
CL.CodeName + ', '
FROM
cteLookup CL
WHERE
C.Code LIKE '%' + CL.CodeID + '%'
FOR XML PATH ('')
) AS CodeName
FROM
Cte1 C
) A
输出
Name Code CodeName
------- -------- -------------------------
Alpha AA Avia
Bravo AA,BB,CC Avia, Bahamas, Chile
Whiskey NULL NULL