2016-05-13 82 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