Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 将多行中的数据合并到一行中_Sql Server 2008 - Fatal编程技术网

Sql server 2008 将多行中的数据合并到一行中

Sql server 2008 将多行中的数据合并到一行中,sql-server-2008,Sql Server 2008,该表采用以下格式: ID Category 1 a 1 b 2 a 2 b 2 c 我想要以下格式的输出 ID Category 1 a,b 2 a,b,c 请建议一种有效的方法尝试以下查询: SELECT ID, REPLACE( (SELECT Category AS [data()] FROM T

该表采用以下格式:

ID     Category
1       a
1       b
2       a
2       b
2       c
我想要以下格式的输出

ID              Category
1                  a,b
2                 a,b,c

请建议一种有效的方法

尝试以下查询:

 SELECT ID,  
  REPLACE(
    (SELECT  Category AS [data()] 
     FROM TableA  
     WHERE b.ID=ID
     ORDER BY Category FOR XML PATH('')),
     ' ', ', ')
FROM TableB b 
GROUP BY ID

上次我遇到了类似的事情,我用程序解决了它。您需要在类别中为特定ID执行循环。

可能类似于以下内容:

测试数据

质疑

可能的重复可能的重复
DECLARE @tbl TABLE(ID INT,Category VARCHAR(100))
INSERT INTO @tbl
VALUES
    (1,'a'),
    (1,'b'),
    (2,'a'),
    (2,'b'),
    (2,'c')
;WITH CTE     ----CTE Name
AS
(
    SELECT
        ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) AS RowNbr,
        ID,
        Category
    FROM
        @tbl AS tbl
)
SELECT
    CTE.ID,
    (
        STUFF
            ((
                SELECT
                    ','+Category
                FROM @tbl AS tbl
                WHERE tbl.ID=CTE.ID
                FOR XML PATH('')
                )
        ,1,1,'')
    ) AS Category
FROM
    CTE
WHERE
    CTE.RowNbr=1