Mysql行转列.md

小白第一次做这个东西,稍微研究了一下.把结论在这里写一下.有错误之处,请大佬们指点

Mysql行转列

结果集如下
在这里插入图片描述
我们可以分析这个这个结果集.很不适合后台处理.
目标结果集:
在这里插入图片描述
以月份作为嗯.我觉得是一个条件.查询的一个主要的展示条件.
我们需要根据类型type…来展示出来该类型type的所有数量和金额.前提是以month分组

select month,
	max(case type when "0" then number else 0 end) "0类型数量",
	max(case type when "2" then number else 0 end) "2类型数量",
	max(case type when "3" then number else 0 end) "3类型数量",
	max(case type when "0" then money else 0 end) "0类型金额",
	max(case type when "2" then money else 0 end) "2类型金额",
	max(case type when "3" then money else 0 end) "3类型金额"
from	
	(select MONTH(CZSJ) as 'month',DJLX as 'type', COUNT(DJLX) as 'number' ,SUM(HJJE) as "money" from i_billmain where CZSJ like "2018%" group by MONTH(CZSJ),DJLX) as y
group by month;

sql如上.from里面是原结果集.
我们需要根据月份分组.来我们看一下这个中间的这一堆啥意思…

case 这里是个列名 when 这里是这个列名的值
因为我们是要让type作为列.所以这里是type和type的值.

case type when “0” then 显示的值.
我写的是number
即type = 0 的 number的值.这个值就是这种类型的数量
else就是如果没有number他的值是多少.我填的0

结尾跟end.至于为什么要用max.是要这里面每一个条件都要执行一次.因为case可能是只执行一次吧.这个是我猜的.哈哈…我也不知道为什么. 后面就相当于别名了.as Xxx…只不过as省略了.
因为你要唯一的月份.所以要根据month分组.

但是我想要12个月份都显示怎么办???..我也不知道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值