Обеденить столбцы в один и посчитать по ним сумму

SashaKh
Дата: 22.04.2015 21:28:57
Всем првиет.

Подскажите как можно сделать запрос к таблице вида:

with tbl as
(
	select Client, Product, SubCategory, Category, Volume
	from	(values ('A', 'p1','Sub1','Categ1',1),
					('A', 'p2','Sub1','Categ1',1),
					('A', 'p3','Sub2','Categ1',1),
					('A', 'p4','Sub2','Categ1',1),
					('A', 'p5','Sub3','Categ2',1),
					('B', 'p6','Sub3','Categ2',1)
			) as tbl (Client, Product, SubCategory, Category, Volume)
)

SELECT *
FROM tbl


Что бы в результате вышло:
ClientProductVolume
Ap11
Ap21
Ap31
Ap41
Bp51
Bp61
ASub12
ASub22
ASub31
BSub31
ACateg14
ACateg21
BCateg21


Тоесть нужно в рамках одного клиента нужно иметь ряды в которых будет объем продукта, сума по саб-категориям и сумма по категориям.

Такое вобще возможно сделать?

Заранее спасибо за любые идеи.
SashaKh
Дата: 22.04.2015 21:51:41
Совсем забыл, версия сервера MS SQL 2008 R2.
invm
Дата: 22.04.2015 22:16:45
with tbl as
(
	select Client, Product, SubCategory, Category, Volume
	from	(values ('A', 'p1','Sub1','Categ1',1),
					('A', 'p2','Sub1','Categ1',1),
					('A', 'p3','Sub2','Categ1',1),
					('A', 'p4','Sub2','Categ1',1),
					('A', 'p5','Sub3','Categ2',1),
					('B', 'p6','Sub3','Categ2',1)
			) as tbl (Client, Product, SubCategory, Category, Volume)
)
select
 Client, Product, Volume
from
 tbl

union all

select
 Client, SubCategory, sum(Volume)
from
 tbl
group by
 Client, SubCategory

union all

select
 Client, Category, sum(Volume)
from
 tbl
group by
 Client, Category;
GoogleBot
Дата: 22.04.2015 23:02:30
select Client,COALESCE(Category,Product,SubCategory),SUM(Volume) 
from tbl
group by GROUPING SETS((Client, SubCategory),(Client, Category),(Client, Product))
SashaKh
Дата: 23.04.2015 07:45:31
GoogleBot, invm ,

Спасибо запомощь.

Понравился вариант от GoogleBot. Никогда не использовал COALESCE и GROUPING SETS.