今天第一次接触SQL列行转换,自己是利用case when实现。
一:关于case when的语法
case [col_name] when [value1] then [result1] else [default] end
其实类似于C语言中的switch case,先判断case里面的,在于when做判断。说的不是太清楚,后面会有例子来说明
**
二:案例说明
**
图一:原department表(题目来自于leetcode)
目标:实现图二的需求
第一步:先按照月份(month)分开,符合条件的设置revenue
select id,
(case month when ‘Jan’ then revenue end) as Jan_Revenue,
(case month when ‘Feb’ then revenue end) as Feb_Revenue,
(case month when ‘Mar’ then revenue end) as Mar_Revenue
from department
注:说直白点就是在month那一列找Jan,有Jan的就返回他对应的revenue值,反之则没有
运行结果如图三:
**
第二步:按照id汇总,再求sum
select id,
sum (case month when ‘Jan’ then revenue end) as Jan_Revenue,
sum (case month when ‘Feb’ then revenue end) as Feb_Revenue,
sum (case month when ‘Mar’ then revenue end) as Mar_Revenue
from department
group by id
关于case when更详细的用法,可以参考这篇,写的很好!
https://blog.youkuaiyun.com/changxiangyangy/article/details/86718551