语法:decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
语法解析:
IF 条件=值1 THEN
RETURN(返回值1)
ELSIF 条件=值2 THEN
RETURN(返回值2)
......
ELSIF 条件=值n THEN
RETURN(返回值n)
ELSE
RETURN(缺省值)
END IF
(decode() 详解:https://blog.csdn.net/Java_15707951907/article/details/103009987)
实战:
部门表 Department:
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| id | int |
| revenue | int |
| month | varchar |
+---------------+---------+
(id, month) 是表的联合主键。
这个表格有关于每个部门每月收入的信息。
月份(month)可以取下列值
["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]。
编写一个 SQL 查询来重新格式化表,使得新的表中有一个部门 id 列和一些对应 每个月 的收入(revenue)列。
查询结果格式如下面的示例所示:
Department 表:
+------+---------+-------+
| 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
id "id",
MAX(DECODE(month,'Jan',revenue,null)) "Jan_Revenue",
MAX(DECODE(month,'Feb',revenue,null)) "Feb_Revenue",
MAX(DECODE(month,'Mar',revenue,null)) "Mar_Revenue",
MAX(DECODE(month,'Apr',revenue,null)) "Apr_Revenue",
MAX(DECODE(month,'May',revenue,null)) "May_Revenue",
MAX(DECODE(month,'Jun',revenue,null)) "Jun_Revenue",
MAX(DECODE(month,'Jul',revenue,null)) "Jul_Revenue",
MAX(DECODE(month,'Aug',revenue,null)) "Aug_Revenue",
MAX(DECODE(month,'Sep',revenue,null)) "Sep_Revenue",
MAX(DECODE(month,'Oct',revenue,null)) "Oct_Revenue",
MAX(DECODE(month,'Nov',revenue,null)) "Nov_Revenue",
MAX(DECODE(month,'Dec',revenue,null)) "Dec_Revenue"
FROM Department
GROUP BY id
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reformat-department-table
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。