跳到主要内容

1179.重新格式化部门表

序号题目难度
1179题目链接简单

题目大意​

重新格式化表格,使得 每个月 都有一个部门 id 列和一个收入列。

以 任意顺序 返回结果表。

表 Department:

Column NameType
idint
revenueint
monthvarchar

在 SQL 中,(id, month) 是表的联合主键。 这个表格有关于每个部门每月收入的信息。 月份(month)可以取下列值 ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。

示例​

输入​

Department table:

idrevenuemonth
18000Jan
29000Jan
310000Feb
17000Feb
16000Mar

输出​

idJan_RevenueFeb_RevenueMar_Revenue...Dec_Revenue
1800070006000...null
29000nullnull...null
3null10000null...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
;