2017-08-10 69 views
1

我有一個表,看起來像這樣如何合併兩條記錄?

ID | Value | Type 
----------------------- 
1 | 50 | Travel 
1 | 25 | Non-Travel 
1 | 25 | Non-Travel 
1 | 25 | Non-Travel 
1 | 50 | Travel 
1 | 75 | Non-Travel 

我如何查詢這使輸出重新安排到這一點?

ID | Travel | Non-Travel 
------------------------ 
1 | 100 | 150 

查詢真正得到我張貼的第一個表有許多連接和在0或NULL非旅遊和1表的一個BIT列旅遊。所以,我有這樣的事情:

SELECT 
    [ID] 
    ,CASE WHEN [IsTravel] IN (0,NULL) THEN ISNULL(SUM([VALUE]),0) END AS 'NonTravel' 
    ,CASE WHEN [IsTravel] = 1 THEN ISNULL(SUM([VALUE]),0) END AS 'Travel' 
FROM 
    ... 

但是結果最終顯示此

ID | Travel | Non-Travel 
------------------------ 
1 | 100 | NULL 
1 | NULL | 150 

如何編輯我的查詢到的行相結合來展示這樣的結果?

ID | Travel | Non-Travel 
------------------------ 
1 | 100 | 150 

在此先感謝。

+0

你可以運行結果組。選擇ID,SUM(旅行),SUM([非旅行])FROM()GROUP BY ID? – Ernesto

回答

1
select ID, 
SUM(CASE WHEN Type = 'Travel' THEn value ELSE 0 END) [Travel], 
SUM(CASE WHEN Type = 'NonTravel' THEn value ELSE 0 END) [NonTravel] 
from @Table1 
    GROUP BY ID 
+0

不錯!簡單而乾淨。非常感謝。 – blacksaibot

+0

歡迎@blacksaibot – mohan111

1

您需要將每個條件彙總到彙總中,例如MAX()GROUP BY其他列,以彙總值並刪除NULL。事情是這樣的:

SELECT 
    [ID] 
    ,MAX(CASE WHEN [IsTravel] IN (0,NULL) THEN ISNULL(SUM([VALUE]),0) END) AS 'NonTravel' 
    ,MAX(CASE WHEN [IsTravel] = 1 THEN ISNULL(SUM([VALUE]),0) END) AS 'Travel' 
FROM 
    ... 
GROUP BY [ID] 

如果邏輯過於雜亂或混亂(不知道沒有看到您的當前整個查詢),然後丟棄這些結果到一個臨時表或CTE並從那裏做簡單MAX()GROUP BY

1

可以使用旋轉如下:如下

Select * from (
    Select Id, [Value], [Type] from yourtable) a 
pivot (sum([Value]) for [Type] in ([Travel],[Non-Travel])) p 

輸出:

+----+------------+--------+ 
| Id | Non-Travel | Travel | 
+----+------------+--------+ 
| 1 |  150 | 100 | 
+----+------------+--------+ 

對於旅遊類型的動態列表,你可以做如下動態查詢:

Declare @cols1 varchar(max) 
Declare @query nvarchar(max) 

Select @cols1 = stuff((select Distinct ','+QuoteName([Type]) from #traveldata for xml path('')),1,1,'') 

Set @query = ' Select * from (
    Select Id, [Value], [Type] from #traveldata) a 
pivot (sum([Value]) for [Type] in (' + @cols1 + ')) p ' 

Exec sp_executesql @query