SQL Server 2008 R2——使用FOR XML PATH实现多条信息按指定格式在一行显示

=================================版权声明=================================

版权声明:原创文章 谢绝转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

勿用于学术性引用。

勿用于商业出版、商业印刷、商业引用以及其他商业用途。                   

本文不定期修正完善。

本文链接:http://www.cnblogs.com/wlsandwho/p/5039358.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

没啥说的,鄙视那些无视版权随意抓取博文的爬虫小网站,祝你们早升极乐。

=======================================================================

直接上问题

首先,事主的提问风格我还是很喜欢的,一目了然。

但是,就实际问题来讲,是不是2条就4列?如果有100条,岂不是爆炸了?

所以,实际上事主应该是想要一个水平显示的效果,而不是一定要有很多列。

不用说我是不是瞎猜的,我就是瞎猜的。哈哈哈。

上代码。

=======================================================================

 1 --by wls 20151211
 2 --网络代码有风险
 3 --复制粘贴须谨慎
 4 USE tempdb
 5 GO
 6 
 7 IF OBJECT_ID (N't_TestbyWLS', N'U') IS NOT NULL
 8 DROP TABLE t_TestbyWLS;
 9 GO
10 
11 CREATE TABLE t_TestbyWLS(Author NVARCHAR(9),Caption NVARCHAR(50),ReadCount INTEGER)
12 GO
13 
14 INSERT INTO t_TestbyWLS VALUES('WLS','Hello1',100)
15 INSERT INTO t_TestbyWLS VALUES('WLS','Hello2',100)
16 INSERT INTO t_TestbyWLS VALUES('thbytwo','Hello2',200)
17 INSERT INTO t_TestbyWLS VALUES('thbytwo','Hello1',220)
18 INSERT INTO t_TestbyWLS VALUES('wlsandwho','Hello1',220)
19 GO
20 
21 SELECT * FROM t_TestbyWLS
22 GO
23 
24 WITH TempCRC
25 AS
26 (
27 SELECT Author,caption+' '+CAST(readcount AS NVARCHAR(20)) AS CRC FROM t_TestbyWLS
28 )
29 ,TempXML
30 AS
31 (
32 SELECT Author,(SELECT CRC+',' FROM TempCRC a WHERE a.author=b.author FOR XML PATH('') ) AS CRCXML FROM TempCRC B GROUP BY author 
33 )
34 SELECT author,LEFT(crcxml,LEN(crcxml)-1) AS NewCRCXML FROM TempXML
35 GO

运行结果。

执行计划。

=======================================================================

千万不要吐槽我的第二个CTE,那是没办法的事情。写了这么多SQL典型例子,大家见我哪次用子查询了?真是迫不得已。

=======================================================================

(友情支持请扫描这个)

微信扫描上方二维码捐赠

原文地址:https://www.cnblogs.com/wlsandwho/p/5039358.html