SQL Server:将每列合并为1行

时间:2020-04-10 12:08:22

标签: tsql sql-server-2016

我有一个非常复杂的查询,返回的信息如下:

Image1

我想将所有列分组如下:

image2

有简单的方法吗?

2 个答案:

答案 0 :(得分:0)

这将是获得结果的一种方式:

SELECT 
   t.ID,
   STUFF((SELECT distinct ', ' + t.InternalRef
          FROM #t t
          FOR XML PATH('')), 1, 1, '') [InternalRef],

   STUFF((SELECT distinct ', ' + t.ExternalRef
   FROM #t t
   FOR XML PATH('')), 1, 1, '') [ExternalRef],

   STUFF((SELECT distinct ', ' + t.ComposantIdentifier
   FROM #t t
   FOR XML PATH('')), 1, 1, '') [ComposantIdentifier]
FROM #t t
GROUP BY t.ID
ORDER BY 1

您可以尝试此here的演示。

答案 1 :(得分:0)

您在这里:

WITH cte AS (
    SELECT 368519 AS Id, '243625378R' AS InternalRef, '492-90-113' AS ExternalRef, '1749MA' AS ComponentIdentifier
    UNION ALL
    SELECT 368519 AS Id, '243625378R' AS InternalRef, '492-90-114' AS ExternalRef, '1749MA' AS ComponentIdentifier
    UNION ALL
    SELECT 368519 AS Id, '(8200945715)' AS InternalRef, '(7807965)' AS ExternalRef, '1749MA' AS ComponentIdentifier)
SELECT
    Id,
    STUFF((SELECT ',' + InternalRef FROM cte FOR XML PATH ('')), 1, 1, ''),
    STUFF((SELECT ',' + ExternalRef FROM cte FOR XML PATH ('')), 1, 1, ''),
    ComponentIdentifier
FROM
    cte
GROUP BY
    Id,
    ComponentIdentifier;

假设cte是公用表表达式,它是您现有查询的输出。因此,您可以将其包装在通用表表达式中(替换我的UNION语句),将其放入临时表,表变量等中。

我也在做出一些可能错误的假设,但我的输出与您的相符:

Id      (No column name)                    (No column name)        ComponentIdentifier
368519  243625378R,243625378R,(8200945715)  492-90-113,492-90-114,(7807965) 1749MA
相关问题