一、多行转成一列(并以","隔开)
表名:A
表数据:
想要的查询结果:
查询语句:
SELECT name ,
value = ( STUFF(( SELECT ',' + value
FROM A
WHERE name = Test.name
FOR
XML PATH('')
), 1, 1, '') )
FROM A AS Test
GROUP BY name;
PS:STUFF语句就是为了去掉第一个【逗号】
附STUFF用法:(从原字符的第二个开始共三个字符替换为后面的字符)
SELECT STUFF('abcdef', 2, 3, 'ijklmn');
查询结果:aijklmnef
二、一列转成多行
表名:tb
表数据:
想要的结果:
查询语句:
SELECT a.[name],b.[value]
FROM (SELECT [name],[value]=CAST(''+REPLACE([value],',','')+'' AS xml) FROM tb) a
OUTER APPLY (SELECT [value]=T.C.value('.','varchar(50)') FROM a.[value].nodes('/v') AS T(C)) b
三、行转列(转自大神张志涛的博客 http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html)
1、建立表格
IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb
go
CREATE TABLE tb(姓名 VARCHAR(10),课程 VARCHAR(10),分数 INT)
INSERT INTO tb VALUES('张三','语文',74)
INSERT INTO tb VALUES('张三','数学',83)
INSERT INTO tb VALUES('张三','物理