sql行列互换语句(SQL中如何实现行列互换)

在工作中大家是否遇到过需要将行与列进行互换的情况?我们知道在Excel中只需要复制然后选择性粘贴时选择粘贴内容转置就可以轻松进行行列互换了,那在SQL中怎么实现行列互换呢?

现在有一张某超市的销售业绩表图1想要变成为图2,如何实现?

sql行列互换语句(SQL中如何实现行列互换)(1)

图1 图2

我们先将两张表进行对比发现图2中除了月份列一致,后面3列数据与图1都不一致,需要我们自己创建后面的3列数据

sql行列互换语句(SQL中如何实现行列互换)(2)

处理步骤

首先需要查找月份和A门店,B门店,C门店,如果仅仅查找这几个条件会是什么结果?

Select 月份,'A门店','B门店','C门店'

From 销售业绩表

得到下图

sql行列互换语句(SQL中如何实现行列互换)(3)

我们发现与上面的图与我们所需要的图2除了第一列与第一行一致外,其余值的部分并不是我们想要的,那接下来我们如何将这部分数据改成我们需要的图2的数据呢?

sql行列互换语句(SQL中如何实现行列互换)(4)

其实此处需要用到case表达式,用case语句进行条件判断来替换

case表达式语法如下:

Case ...when条件then表达式

Else 表达式

End

我们来试试把条件带入case表达式中

SELECT 月份,

(case 门店 when'A门店' then 业绩 else 0 END) as 'A门店',

(case 门店 when 'B门店' then 业绩 else 0 END) as 'B门店',

(case 门店 when 'C门店' then 业绩 else 0 END) as 'C门店'

from 销售业绩表

group by 月份

得到下面的结果

sql行列互换语句(SQL中如何实现行列互换)(5)

观察这个结果发现仍不是我们想要的表,这张表里有很多0,怎么才能去掉0呢?其实只要取最大值就可以了,我们来试试吧

SELECT 月份,

max(case 门店 when'A门店' then 业绩 else 0 END) as 'A门店',

max(case 门店 when 'B门店' then 业绩 else 0 END) as 'B门店',

max(case 门店 when 'C门店' then 业绩 else 0 END) as 'C门店'

from 销售业绩表

group by 月份

sql行列互换语句(SQL中如何实现行列互换)(6)

这样我们就得到了行列互换后的表(图2)。大家学会了吗?以后在sql中遇到需要行列互换记得用这个模板哦!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页