2010-07-30 214 views
4

希望有人能幫助我是新手SQL黑客T-SQL - - 字符串連接

我有SQL Server上的兩個表2005表1和TABLE2:

TABLE1

COL1   COL2 
1   10 
2   20 
3   30 
4   10 
4   20 
5   20 
6   30 
7   10 
7   20 

TABLE2

COL1   COL2 
10   A 
20   B 
30   C 

COL2在TABLE2是在數值數據的一個字符表示COL2 TABLE1。我希望這是可以理解的?

我已經制定了如何從TABLE1選擇COL1 COL2和串聯和結果表明這一點:

COL1   COL2Concat 
1   10 
2   20 
3   30 
4   10, 20 
5   20 
6   30 
7   10, 20, 30 

使用此:

SELECT COL1, 
     STUFF((SELECT ',' + CAST(a.COL2 AS VARCHAR(255)) AS [text()] 
       FROM TABLE1 a 
       WHERE a.COL1 = b.COL1 
       ORDER BY a.COL2 
       FOR 
       XML PATH('') 
      ), 1, 1, '') AS COL2Concat 
FROM TABLE1 b 
GROUP BY COL1 
ORDER BY COL1 

但現在我想試試和除了使用COL2 TABLE2中的數據...即:

COL1   COL2Concat 
1   A 
2   B 
3   C 
4   A, B 
5   B 
6   C 
7   A, B, C 

任何想法 - 我堅持要說實話,我已經嘗試修改STUFF查詢,但它似乎永遠不會出來的權利...

+0

你想顯示A,B,C,而不是10, 20,30? – LittleBobbyTables 2010-07-30 15:47:32

+1

大概你已經試過把查詢中的所有'TABLE1'改成'TABLE2'。我無法正確地看到爲什麼這不起作用。你得到了什麼? – 2010-07-30 15:52:37

+0

是的,這個例子很簡單,但我需要顯示A,B,C連接成10,20,30等。 – JamesH 2010-07-30 15:53:04

回答

6

你可以試試...

SELECT COL1, 
     STUFF((SELECT ',' + CAST((SELECT COL2 
             FROM TABLE2 
             WHERE TABLE2.COL1 = a.COL1) AS VARCHAR(255)) AS [text()] 
       FROM TABLE1 a 
       WHERE a.COL1 = b.COL1 
       ORDER BY a.COL2 
       FOR 
       XML PATH('') 
      ), 1, 1, '') AS COL2Concat 
FROM TABLE1 b 
GROUP BY COL1 
ORDER BY COL1 
+0

布萊恩 - 謝謝..你已經在大約1分鐘內解決了什麼讓我整天疲於奔命!非常感謝。 – JamesH 2010-07-30 16:15:15

+0

我的榮幸。你做了所有艱難的事情,並忽略了最後一點。 – 2010-07-30 16:26:32

+0

知道你可以在CAST部分放置一個子句......再次感謝。 – JamesH 2010-07-30 16:28:39