2016-07-19 6 views
1

サンプルコードのようにCodeNameを表示するタスクがあり、コンマで区切られた複数のコードがある可能性がありますが、xml解析を使用しようとしましたが、下のサンプルコードでは単純な方法で行いましたが、もっと柔軟な方法があるかもしれません。 また、希望する出力を写真に含めます。 Sample of desired output click hereTSQL結合内で水平に連結する方法

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

あなたの代わりに写真のテキストとして追加できる画像は、私はあなたがこの画像のhttpを追加した理由は分からない、いくつかのドメイン – TheGameiswar

+0

にブロックされます://?私は.stack.imgur.com/H1k2W.jpgはそれをロールバックしました。 –

答えて

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 
+0

Tx Hebele、これは完璧です、 –

+0

あなたは歓迎です – NEER

関連する問題