SQL Pivot на подмножестве - PullRequest
1 голос
/ 02 июня 2009

У меня есть следующий набор результатов:

Тип | Метод | Сумма

Тип 1 Сумма наличных
Тип 1 Сумма чека
Тип 2 Сумма наличных
Тип 2 Сумма чека
Тип 3 Сумма наличных
Тип 3 Контрольная сумма


И я хочу, чтобы это выглядело так:

Тип | Наличными | Чек

Тип1 Сумма Сумма
Тип2 Сумма Сумма
Тип 3 Сумма Сумма

Как мне добиться этого в T-SQL (синтаксис 2005 год в порядке)? Мне нужно поворачиваться по типу (1, 2, 3 ...)

Ответы [ 2 ]

0 голосов
/ 04 июня 2009

Или еще лучше:

select
  Type
, Cash  = sum(case when Method = 'Cash'  then Amount end)
, Check = sum(case when Method = 'Check' then Amount end) 
from yourtable
group by 
  Type

При необходимости добавьте ELSE 0 к операторам CASE.

Эта форма более гибкая, чем оператор PIVOT, и не требует полного соединения. Просто прямая агрегация.

0 голосов
/ 02 июня 2009

Вот попытка PIVOT:

select *
from YourTable
PIVOT (sum(amount) FOR Method in (Cash,Check)) as Y

Учитывая, что это всего два столбца, можно попробовать с объединением:

select
    type
,   cash = a.amount
,   check = b.amount
from yourtable a
full join yourtable b on a.type = b.type
where a.method = 'cash' or b.method = 'Check'
...