sql聚合重复并在末尾附加其他数据

时间:2012-07-30 16:44:03

标签: sql sql-server

我将数据存储在如下格式的表格中。 Heading1,heading2等是列名。正如您所看到的,我有重复数据a b c d然后是两个不同的值。 我想查询这个,所以我可以在第二个提到输出。 对于前 - 前两行在heading1,2,3,4中是相同的,所以输出必须是 a b c d 1 1 2 2 3 4 4 5,我的意思是我只是将所有重复数据分组并在一行中添加不同的数据。这可能吗?

原始数据

heading1 | heading2 | heading3 | heading4 | heading5 | heading6         
----------------------------------------------------------------------------------------
a | b | c | d | 1 | 1 |         
a | b | c | d | 2 | 2 |         
a | b | c | d | 3 | 4 |         
a | b | c | d | 4 | 5 |         
a | b | d | c | 5 | 5 |         

需要输出

heading1 | heading2 | heading3 | heading4 | heading5 | heading6 | | |   
----------------------------------------------------------------------------------------    
a | b | c | d | 1 | 1 | 2 | 2 | 3| 4 |  5 

a | b | d | c | 5 | 5 |         

1 个答案:

答案 0 :(得分:0)

基于this帖子:

DECLARE @TABLE TABLE
(
    heading1 NVARCHAR(1)
    , heading2 NVARCHAR(1)
    , heading3 NVARCHAR(1)
    , heading4 NVARCHAR(1)
    , heading5 NVARCHAR(1)
    , heading6 NVARCHAR(1)
)

INSERT INTO @TABLE
          SELECT 'a', 'b', 'c', 'd', '1', '1'
UNION ALL SELECT 'a', 'b', 'c', 'd', '2', '2'
UNION ALL SELECT 'a', 'b', 'c', 'd', '3', '4'
UNION ALL SELECT 'a', 'b', 'c', 'd', '4', '5'
UNION ALL SELECT 'a', 'b', 'd', 'c', '5', '5'

DECLARE @CONCAT VARCHAR(500)

SELECT heading1, heading2, heading3, heading4
    , cols5and6
FROM @TABLE a
CROSS APPLY
(
    SELECT heading5 + ' | ' + heading6 + ' | '
    FROM @TABLE b
    WHERE a.heading1 = b.heading1
        AND a.heading2 = b.heading2
        AND a.heading3 = b.heading3
        AND a.heading4 = b.heading4
    FOR XML PATH('')
) d (cols5and6)
GROUP BY heading1, heading2, heading3, heading4, cols5and6

输出:

heading1    heading2    heading3    heading4    cols5and6
a   b   c   d   1 | 1 | 2 | 2 | 3 | 4 | 4 | 5 | 
a   b   d   c   5 | 5 |