1

我将数据存储在如下格式的表格中。Heading1、heading2 等是列名。如您所见,我有重复的数据 abcd,然后是两个不同的值。我想查询这个,以便我可以得到第二个提到的输出。例如,heading1,2,3,4 中的前四行相同,因此输出必须为 abcd 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 |         
4

1 回答 1

0

基于这篇文章:

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 | 
于 2012-07-30T19:25:29.497 回答