SQL多行变一列
DECLARE @T TABLE
(
Column1 VARCHAR(50) ,
Column2 VARCHAR(50) NULL ,
ID INT
)
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User1', 'A', 1 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User1', 'B', 2 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User2', 'C', 3 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User2', 'D', 4 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User2', 'E', 5 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'F', 6 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'G', 7 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'H', 8 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'I', 9 )
--按某一列出结果的
SELECT Column1 ,
STUFF(( SELECT ',' + Column2
FROM @T
WHERE Column1 = A.Column1
ORDER BY ID
FOR
XML PATH('')
), 1, 1, '')
FROM @T A
GROUP BY Column1
--找符合条件的某一列数据
--法一
SELECT STUFF(( SELECT ',' + Column2
FROM @T
WHERE 1 = 1
ORDER BY ID
FOR
XML PATH('')
), 1, 1, '') List
--法二
SELECT LEFT(List, LEN(List) - 1) list
FROM ( SELECT ( SELECT Column2 + ','
FROM @T
WHERE 1 = 1
ORDER BY ID
FOR
XML PATH('')
) AS List
) B
--法三
DECLARE @list VARCHAR(MAX)
SET @list = ''
SELECT @list = @list + Column2 + ','
FROM @T
SELECT LEFT(@list, LEN(@list) - 1) AS LIST
(
Column1 VARCHAR(50) ,
Column2 VARCHAR(50) NULL ,
ID INT
)
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User1', 'A', 1 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User1', 'B', 2 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User2', 'C', 3 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User2', 'D', 4 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User2', 'E', 5 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'F', 6 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'G', 7 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'H', 8 )
INSERT @T
( Column1, Column2, ID )
VALUES ( 'User3', 'I', 9 )
--按某一列出结果的
SELECT Column1 ,
STUFF(( SELECT ',' + Column2
FROM @T
WHERE Column1 = A.Column1
ORDER BY ID
FOR
XML PATH('')
), 1, 1, '')
FROM @T A
GROUP BY Column1
--找符合条件的某一列数据
--法一
SELECT STUFF(( SELECT ',' + Column2
FROM @T
WHERE 1 = 1
ORDER BY ID
FOR
XML PATH('')
), 1, 1, '') List
--法二
SELECT LEFT(List, LEN(List) - 1) list
FROM ( SELECT ( SELECT Column2 + ','
FROM @T
WHERE 1 = 1
ORDER BY ID
FOR
XML PATH('')
) AS List
) B
--法三
DECLARE @list VARCHAR(MAX)
SET @list = ''
SELECT @list = @list + Column2 + ','
FROM @T
SELECT LEFT(@list, LEN(@list) - 1) AS LIST