龙空技术网

SQL中如何实现行列互换?

有柚哟 154

前言:

而今大家对“c语言交换语句的程序怎么写”大概比较看重,大家都需要剖析一些“c语言交换语句的程序怎么写”的相关文章。那么小编同时在网摘上搜集了一些对于“c语言交换语句的程序怎么写””的相关内容,希望你们能喜欢,同学们一起来学习一下吧!

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

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

图1 图2

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

处理步骤

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

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

From 销售业绩表

得到下图

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

其实此处需要用到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 月份

得到下面的结果

观察这个结果发现仍不是我们想要的表,这张表里有很多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 月份

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

标签: #c语言交换语句的程序怎么写