2012-07-30 44 views
1

我有像下面的格式存儲在表中的數據。標題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

回答

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

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

+0

當然,只需單獨選擇它們,而不是將它們與字符串連接一起選擇。 – 2012-08-14 13:12:36