我有一种情况,我需要将来自DENSE_RANK函数的SQL结果“连接”为单个字符串,但我不知道另一个SQL函数会这样做。从SQL连接字符串结果DENSE_Rank
的问题是,我最终从DENSE_RANK功能,可以预期其同级别多行,所以例如:
ID Info Total Rank
1 A 2 1
1 B 2 1
1 C 1 2
2 D 2 1
2 E 1 2
3 F 1 1
我想实现的是结果看起来像下面,是因为ID 1有2个信息与同级别我想将它们“拼接”成一个字符串(用逗号隔开):
ID Info1 Info2
1 A,B C
2 D E
3 F G
我目前有以下代码给我从DENSE_RANK的结果,但我试图弄清楚如何让我的最终结果集,我有一个“串联”的字符串,我试过一些不同的技术并通过stackoverflow有一个很好的看,但我不能找到一种方式,将使其工作。
SELECT t1.ID
,t2.Info1
,t3.Info2
,t4.Info3
FROM table1 t1 WITH (NOLOCK)
LEFT JOIN (SELECT t2.ID
,t2.Info AS Info1
,t2.Total
FROM (SELECT t2.ID
,t2.Info
,t2.Total
,DENSE_RANK() OVER (PARTITION BY t2.ID ORDER BY t2.Total DESC) AS DENSE_RANK
FROM table2 t2 WITH (NOLOCK)) t2
WHERE DENSE_RANK = 1) AS t2 ON t1.ID = t2.ID
LEFT JOIN (SELECT t3.ID
,t3.Info AS Info2
,t3.Total
FROM (SELECT t3.ID
,t3.Info
,t3.Total
,DENSE_RANK() OVER (PARTITION BY t3.ID ORDER BY t3.Total DESC) AS DENSE_RANK
FROM table3 t3 WITH (NOLOCK)) t3
WHERE DENSE_RANK = 2) AS t3 ON t1.ID = t3.ID
LEFT JOIN (SELECT t4.ID
,t4.Info AS Info3
,t4.Total
FROM (SELECT t4.ID
,t4.Info
,t4.Total
,DENSE_RANK() OVER (PARTITION BY t4.ID ORDER BY t4.Total DESC) AS DENSE_RANK
FROM table4 t4 WITH (NOLOCK)) t4
WHERE DENSE_RANK = 3) AS t4 ON t1.ID = t4.ID
ORDER BY t1.ID ASC
谢谢,我已经给然而试试看我结束了结果以Info1为例: A,B,A,B,A,B,D,D,F –
请看我的上面的答案,我通过向STUFF查询添加了DISTINCT来得到它。谢谢。 –
欢迎您:) – Nithesh