2016-05-13 83 views
1

如果可能,我正在寻找一种方法来对进行动态分组条件的总结,只有一个查询。这也意味着没有UNION ALL。 (下面的查询是很容易的,UNION ALL不会贵,但如果源数据必须从一堆表的聚集它降低服务表现做所有联接的两倍。)动态分组条件求和值

示例数据:

create table data (id int, location nvarchar(1), qty int, grouping tinyint) 

insert into data (id, location, qty, grouping) values (1, 'A', 10, 0) 
insert into data (id, location, qty, grouping) values (1, 'A', 20, 0) 
insert into data (id, location, qty, grouping) values (1, 'B', 15, 0) 
insert into data (id, location, qty, grouping) values (2, 'A', 5, 1) 
insert into data (id, location, qty, grouping) values (2, 'B', 10, 1) 
insert into data (id, location, qty, grouping) values (3, 'B', 20, 1) 

数量应总结每个位置,如果分组是0,每个ID别的。

估计结果:

1, A, 30 
1, B, 15 
2, null, 15 
3, null, 20 

SQL-Fiddle

回答

0

这是可能的,使用CASE WHEN ...

SELECT id , 
     (CASE WHEN grouping = 0 THEN location ELSE NULL END) AS location, 
     SUM(qty) AS qty 
FROM data 
GROUP BY id ,(CASE WHEN grouping = 0 THEN location ELSE NULL END) 
ORDER BY id 

结果:

id location qty 
1 A   30 
1 B   15 
2 NULL  15 
3 NULL  20