2013-11-16 3 views
1

Я таблица объявляется следующим образомРасщепление SQL Query Result в дополнительные столбцы

declare @t table(ProductCode char(25), Description char(100), Supplier char(50), ForwardOrder bit, SalesNotDelivered decimal(15,2)) 

с фиктивными данными

insert into @t(ProductCode, Description, Supplier, ForwardOrder, SalesNotDelivered) 
values ('ABC', 'DescABC', 'S1', 1, 10) 

insert into @t(ProductCode, Description, Supplier, ForwardOrder, SalesNotDelivered) 
values ('ABC', 'DescABC', 'S1', 0, 20) 

insert into @t(ProductCode, Description, Supplier, ForwardOrder, SalesNotDelivered) 
values ('ABC', 'DescABC', 'S1', 0, 30) 

insert into @t(ProductCode, Description, Supplier, ForwardOrder, SalesNotDelivered) 
values ('ABC', 'DescABC', 'S1', 0, 40) 

insert into @t(ProductCode, Description, Supplier, ForwardOrder, SalesNotDelivered) 
values ('ABC', 'DescABC', 'S1', 0, 50) 

insert into @t(ProductCode, Description, Supplier, ForwardOrder, SalesNotDelivered) 
values ('DEF', 'DescDEF', 'S2', 0, 500) 

Я хочу суммировать столбец SalesNotDelivered, но разделить его на две части в наборе результатов - один столбец с указанием суммы форвардных ордеров, другой - суммы неуправляемых заказов

Таким образом, используя приведенные выше данные, я бы в итоге:

ProductCode Description Supplier SalesNotDelivered SalesNotDeliveredFwdOrders 
ABC   DescABC  S1   140     10 
DEF   DescDEF  S2   500     0 

Каков наиболее эффективный запрос для этого?

+1

, что запрос вы написали? –

ответ

2

звук, как вам нужно CASE выражение с GROUP BY п

SELECT ProductCode, [Description], Supplier, 
     ISNULL(SUM(CASE WHEN ForwardOrder <> 1 THEN SalesNotDelivered END), 0) AS SalesNotDelivered, 
     ISNULL(SUM(CASE WHEN ForwardOrder = 1 THEN SalesNotDelivered END), 0) AS SalesNotDeliveredFwdOrders   
FROM @t 
GROUP BY ProductCode, [Description], Supplier 

Демо на SQLFiddle

+1

Отлично, спасибо. Работает с удовольствием – David

0

В SQL было бы несколько, как

SELECT 
ProductCode, Description,Supplier, 
SUM(SalesNotDelivered) as SalesNotDelivered, 
SUM(ForwardOrder)as SalesNotDeliveredFwdOrders 
FROM t 
GROUP BY 
Supplier 
Смежные вопросы