1179.重新格式化部门表
| 序号 | 题目 | 难度 |
|---|---|---|
| 1179 | 题目链接 | 简单 |
题目大意
重新格式化表格,使得 每个月 都有一个部门 id 列和一个收入列。
以 任意顺序 返回结果表。
表 Department:
| Column Name | Type |
|---|---|
| id | int |
| revenue | int |
| month | varchar |
在 SQL 中,(id, month) 是表的联合主键。
这个表格有关于每个部门每月收入的信息。
月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。
示例
输入
Department table:
| id | revenue | month |
|---|---|---|
| 1 | 8000 | Jan |
| 2 | 9000 | Jan |
| 3 | 10000 | Feb |
| 1 | 7000 | Feb |
| 1 | 6000 | Mar |
输出
| id | Jan_Revenue | Feb_Revenue | Mar_Revenue | ... | Dec_Revenue |
|---|---|---|---|---|---|
| 1 | 8000 | 7000 | 6000 | ... | null |
| 2 | 9000 | null | null | ... | null |
| 3 | null | 10000 | null | ... | null |
解释
四月到十二月的收入为空。 请注意,结果表共有 13 列(1 列用于部门 ID,其余 12 列用于各个月份)。
参考答案
select
t1.id
,sum(case when t1.month = 'Jan' then t1.revenue else null end) Jan_Revenue
,sum(case when t1.month = 'Feb' then t1.revenue else null end) Feb_Revenue
,sum(case when t1.month = 'Mar' then t1.revenue else null end) Mar_Revenue
,sum(case when t1.month = 'Apr' then t1.revenue else null end) Apr_Revenue
,sum(case when t1.month = 'May' then t1.revenue else null end) May_Revenue
,sum(case when t1.month = 'Jun' then t1.revenue else null end) Jun_Revenue
,sum(case when t1.month = 'Jul' then t1.revenue else null end) Jul_Revenue
,sum(case when t1.month = 'Aug' then t1.revenue else null end) Aug_Revenue
,sum(case when t1.month = 'Sep' then t1.revenue else null end) Sep_Revenue
,sum(case when t1.month = 'Oct' then t1.revenue else null end) Oct_Revenue
,sum(case when t1.month = 'Nov' then t1.revenue else null end) Nov_Revenue
,sum(case when t1.month = 'Dec' then t1.revenue else null end) Dec_Revenue
from Department t1
group by 1
;