2010-07-30 274 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