sql来聚合重复并在最后附加额外的数据

问题描述:

我有像下面的格式存储在表中的数据。标题1,标题2等是列名称。正如你所看到的,我有重复的数据a b c d,然后有两个不同的值。 我想查询这个,以便我可以得到第二个提到的输出。 对于前 - 前4行是相同的标题1,2,3,4所以输出必须是 a b c d 1 1 2 2 3 4 4 5,我的意思是我刚分组所有重复的数据,并在一行中添加不同的数据。这可能吗?sql来聚合重复并在最后附加额外的数据

源数据

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

你在做什么关系型数据库?您的结果显示了具有不同列数的2行。查询结果是一个(虚拟)表 - 它的行对于每一行总是具有相同的数量和类型的列。 – 2012-07-30 16:50:36

+0

您使用的是2005年还是2008年 - 窗口功能在这里可能会有所帮助。 – Hogan 2012-07-30 16:58:28

+0

我正在使用sql server 2008.如果数据可以聚合,我可以添加标题。 – viraz 2012-07-30 17:26:05

基于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 | 
+0

我希望cols5and6中的值在单列中不在一列中。那可能吗? – viraz 2012-08-10 10:11:59

+0

当然,只需单独选择它们,而不是将它们与字符串连接一起选择。 – 2012-08-14 13:12:36