2017-08-10 34 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