Суммировать один столбец в одной строке? - PullRequest
1 голос
/ 07 июня 2011

Я хотел бы суммировать один столбец, но на основе разных типов транзакций, и чтобы эти суммы отображались только в одной строке.

Мой SQL (SQL Server 2000) выглядит так:

SELECT c.customername,
       CASE WHEN t.transactiontypekey IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) THEN SUM(t.tranamount) ELSE 0 END as 'Tot-Exp',
       CASE WHEN t.transactiontypekey IN (20,21,22,23,30,32,34,36) THEN SUM(t.tranamount) ELSE 0 END as 'Tot-Rev',
       CASE WHEN t.transactiontypekey IN (31,33,35,37) THEN SUM(t.tranamount) ELSE 0 END as 'Tot-Fee'
FROM customers c, transactions t
WHERE c.customerkey = t.customerkey
GROUP BY c.customername, t.transactiontypekey
ORDER BY c.customername

В приведенном выше SQL типы транзакций разбиты на расходы, доходы и сборы, а вывод, приведенный выше, отображается как:

customernameTot-Exp  Tot-Rev    Tot-Fee
CUSTOMER1   13.3900    .0000      .0000
CUSTOMER1     .0000 549.0000      .0000
CUSTOMER1     .0000    .0000    60.0000
CUSTOMER1     .0000    .0000      .0000

Как мне сделать так, чтобы мой вывод выглядел так:

customername     Tot-Exp   Tot-Rev  Tot-Fee
CUSTOMER1         13.390    549.00   60.000

одна строка на клиента со всеми итогами столбца 't.tranamount' только в этой строке?

1 Ответ

4 голосов
/ 07 июня 2011

Суммируйте само выражение CASE;

SUM(CASE WHEN t.transactiontypekey IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) THEN t.tranamount ELSE 0 END) as 'Tot-Exp',

И удалите t.transactiontypekey из GROUP BY.

...