Много строк в один ряд - PullRequest
       1

Много строк в один ряд

1 голос
/ 08 июля 2010

Надеюсь, я хорошо это объясняю. Я борюсь с этим запросом:

У меня есть таблица, похожая на эту:

InvoiceNum
Amount
Type  - where type could be item, shipping or tax. 

Итак, я хочу получить по одной строке на один счет: InvoiceNum, ItemAmount, ShippingAmount, TaxAmount.

Вот пример:

Invoicenum Amount Type
1          $32    Item
1          $2     Shipping
1          $1     Tax 

Я бы хотел вернуться:

InvoiceNum ItemAmount ShippingAmount TaxAmount 
1          $32        $2             $1

Ответы [ 2 ]

4 голосов
/ 08 июля 2010

Вы можете суммировать строки с помощью group by, и вы можете выбрать определенные строки с помощью case:

select  InvoiceNum
,       sum(case when Type = 'Item' then Amount end) as ItemAmount
,       sum(case when Type = 'Shipping' then Amount end) as ShippingAmount
,       sum(case when Type = 'Tax' then Amount end) as TaxAmount
from    YourTable
group by
        InvoiceNum

Оператор case возвращает null по умолчанию, а sum игнорирует нули.

3 голосов
/ 08 июля 2010

Вы можете сделать это с помощью трюков по группам и сумме (максимум работает тоже), как показывает @Andomar.

В качестве альтернативы, Microsoft SQL Server поддерживает синтаксис для операции PIVOT, которая помогаетнемного в этом типе запроса.Вы все еще должны жестко закодировать названия столбцов.

SELECT InvoiceNum, [Item] AS ItemAmount, [Shipping] AS ShippingAmount, [Tax] AS TaxAmount
FROM 
(SELECT InvoiceNum, Amount, Type FROM InvoiceTable ) i
PIVOT
(
  MAX(Amount)
  FOR Type IN ([Item], [Shipping], [Tax])
) AS pvt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...