在T-SQL中以多列格式连接行

时间:2015-07-23 14:09:19

标签: sql-server tsql

输入:表 A

company | name    | rank
---------------------------     
ABC     | Tom     | 1
ABC     | Harry   | 3
ABC     | Robert  | 2
DEF     | Chris   | 2
DEF     | Dwayne  | 1

输出:表 B

company |     names             | ranks
--------------------------------------------          
ABC     |  Tom, Harry, Robert   | 1,3,2
DEF     |  Chris, Dwayne        | 2,1
--------------------------------------------     

我想在列name和{{}中的表 A 中逐行连接rankcompany(基于names)表 B 中的1}}对于表 B 中的每一行,ranks中的名称顺序对应{{1}中的排名顺序}。

我正在使用下面的T-SQL查询(试一试here):

names

这可以优化为只使用一个ranks SELECT DISTINCT company, (SELECT name + ',' FROM A as t2 WHERE t2.company = t1.company ORDER BY rank FOR XML PATH('')) as names, (SELECT CAST(rank AS VARCHAR) + ',' FROM A as t2 WHERE t2.company = t1.company ORDER BY rank FOR XML PATH('') ) as ranks FROM A as t1; SELECT而不是上面使用的两个names吗?

编辑

使用递归CTE (试一试here):

ranks

0 个答案:

没有答案