Как сделать сводную таблицу в DB2? - PullRequest
0 голосов
/ 02 апреля 2019

У меня таблица будет как:

| Date      | Week | Name   | No | Count |
|-----------|------|--------|----|-------|
| 2019/4/1  |  14  | John   | 1  | 1     |
| 2019/4/1  |  14  | Mary   | 2  | 1     |
| 2019/4/9  |  15  | Kevin  | 3  | 2     |
| 2019/4/9  |  15  | John   | 4  | 1     |
| 2019/4/9  |  15  | Jessie | 5  | 1     |
| 2019/4/18 |  16  | Kevin  | 6  | 1     |
| 2019/4/18 |  16  | John   | 7  | 1     |
| 2019/4/18 |  16  | Jessie | 8  | 2     |
| 2019/4/18 |  16  | Mary   | 9  | 3     |
| 2019/4/18 |  16  | Mary   | 10 | 1     |
| 2019/4/18 |  16  | Jessie | 11 | 1     |
| 2019/4/24 |  17  | Mary   | 12 | 1     |
| 2019/4/24 |  17  | Jessie | 13 | 1     |

Что я хочу сделать, это подсчитать общее количество людей в неделю. И сортировать по их общему количеству.

Я знаю, что GROUP BY может сделать это, я пытался, но просто не могу понять.

Это то, что я ожидаю:

| Name   | 14 | 15 | 16 | 17 | Total |
|--------|----|----|----|----|-------|
| Mary   | 1  | 0  | 4  | 1  | 6     |
| Jessie | 0  | 1  | 3  | 1  | 5     |
| John   | 1  | 1  | 1  | 0  | 3     |
| Kevin  | 0  | 2  | 1  | 0  | 3     |
| Total  | 2  | 4  | 9  | 2  | 17    |

Как я могу это сделать?

1 Ответ

2 голосов
/ 02 апреля 2019
Select [Name] 
 ,sum(case when [Week] = 14 then [Count] else 0 end) as Week14
 ,sum(case when [Week] = 15 then [Count] else 0 end) as Week15
 ,sum(case when [Week] = 16 then [Count] else 0 end) as Week16
 ,sum(case when [Week] = 17 then [Count] else 0 end) as Week17
 ,sum([Count]) as Total
from [table]
group by [Name]
order by Total

Я не уверен, какую версию DB2 вы используете (LUW / zOS / i), так что это общий ответ. Номер недели можно сделать более гибким, но для количества недель потребуется определенное количество жесткого кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...