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
posted @ 2011-07-20 21:49  郭卫华  阅读(468)  评论(0编辑  收藏  举报