2009-10-27 87 views
0

我有一個表A有一個列C和一個查找表(查找),它提供給定一個ID的描述。 這裏的設置:返回給定字符串的描述的字符串(用逗號分隔)

table A with column C values: 

1,2,3 
2,3,4 

table lookup: 
1, 'This' 
2, 'is' 
3, 'tricky' 
4, 'SQL' 

提供返回以下字符串一個SQL(SQL Server 2005中)聲明:

Input: 1,2,3 Output: 'This','Is','tricky' 
Input: 2,3,4 Output: 'Is','tricky','SQL' 

基本上轉向ID的字符串(從輸入表A)轉換成字符串描述

回答

0

SQL Server 2005附帶的示例包含一個名爲Split()的CLR函數。這是迄今爲止分割逗號分隔列表的最佳方式。

假設您有一個名爲inputs的表,其中有一個名爲input的列。

我忘了dbo.Split()的特定輸出是什麼......所以在這裏和我一起工作。我們稱之爲idval的字段,其中id告訴我們它在列表中的哪個條目。

WITH 
separated AS (
    SELECT i.input, s.id, s.val 
    FROM 
     dbo.inputs AS i 
     CROSS APPLY 
     dbo.Split(i.input) AS s 
) 
, converted AS (
    SELECT s.input, s.id, m.string 
    FROM 
     separated AS s 
     JOIN 
     dbo.mapping AS m 
      ON m.number = CAST(s.val AS varchar(5)) 
) 
SELECT c.input, (SELECT string + ' ' FROM converted AS c2 WHERE c2.input = c.input ORDER BY id FOR XML PATH('')) AS converted_string 
FROM converted AS c 
GROUP BY c.input;