case when 数据透视图

时间煮雨
@R星校长

Table 1

ID Type Is_active
1 A Y
1 B N
2 A Y
2 C Y
3 C Y

假设表格1有三列,分别是 商场id比如 商场1 商场2 商场3

产品类别比如A B C 是否在售 : Y 表示 Yes 在售 N表示No
现在想转化成透视表格,也就是每个商场用一行写清楚

要把同一个商场的所有记录整合成一行,还需要结合使用 GROUP BY

一步步来,先看没有 GROUP BY 的情况

select id,
case when type = 'A' then is_active else null end A_active,
case when type = 'B' then is_active else null end B_active,
case when type = 'C' then is_active else null end C_active
from
table_1
order by id;

Without Aggregate Function

ID A_active B_active C_active
1 Y
1 N
2 Y
2 Y
3 Y

Pivot table(透视表)

ID A_active B_active C_active
1 Y N
2 Y Y
3 Y
select id,
max(case when type = 'A' then is_active else null end) A_active,
max(case when type = 'B' then is_active else null end) B_active,
max(case when type = 'C' then is_active else null end) C_active
from
table_1
group by id
order by id;

其实就是新增了三个列,分别对应ABC是否在售,这里的操作是每一行它都会进行判断

比如头两行都针对商场一,但第一行只有产品A的情况,因此在上个CASE WHEN做判断时,只有对应类别 A那列有数值,而其他两列都为空,其他各行也是同理,因此只能对,某个商场的某一个(商品)种类进行判断,原表格有多少行,新表格就有多少行,所以要借助分组函数(GROUP BY)分组函数,把分散的信息整合到一起

用商场ID进行分组后,再从组内取最大值,此时CASE WHEN里的判断条件,类别是否等于A,第一行和第二行的输出结果分别是Y-Yes空(NULL),而另一列也是同理,N的最大值也是N,但由于商场一没有产品类别C,所以两个空的最大值仍然是空

商场二和商场三的信息也同理可推,事实上怎分组,以及用什么样的分组函数都是可以根据需求去调整的,但基本的思路和逻辑框架就是这样了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44745905/article/details/112618379