pg库实现sql行转列

🎈个人公众号:🎈 :✨✨ 可为编程 ✨✨ 🍟🍟
🔑个人信条:🔑知足知不足 有为有不为 为与不为皆为可为🌵
🍉本篇简介:🍉 本片详细说明了pg库实现sql行转列,并给出具体操作实例,如有出入还望指正。

关注公众号【可为编程】回复【面试】领取年度最新面试题大全!!!

这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。

group by + sum + case when实现行转列:
SELECT 
A.ORG_ID,
A.tv_type_count,
A.tv_file_count,
A.tv_date,
CASE
		train_id 
		WHEN '1' THEN
		'ZHI' 
		WHEN '2' THEN
		'XING' 
		WHEN '3' THEN
		'SHI' 
		WHEN '4' THEN
		'KETANG' ELSE NULL 
	END "train_type" 
	
FROM
	T_SYS_LOG A 
WHERE
	org_id = 'xxx'

查询出来的结果是这样:
在这里插入图片描述
这时我就在想要满足前端的展示,一定要将train_type进行一个分解,实现ZHIFA这种类型的数据按照日期进行一个单条数据展示,我就将这条sql抽取了出来:

SELECT 
A.ORG_ID,
A.tv_date,
A.tv_type_count,
A.tv_file_count
FROM
	T_SYS_LOG A 
WHERE
	org_id = 'xxx'

在这里插入图片描述
然后就是sql的行转列了:

SELECT 
A.ORG_ID,
A.tv_date,
SUM ( CASE A.train_id WHEN '1' THEN A.tv_type_count ELSE 0 END) AS fa_type_count,
SUM ( CASE A.train_id WHEN '1' THEN A.tv_file_count ELSE 0 END) AS zhi_file_count,
SUM ( CASE A.train_id WHEN '2' THEN A.tv_type_count ELSE 0 END) AS zheng_type_count,
SUM ( CASE A.train_id WHEN '2' THEN A.tv_file_count ELSE 0 END) AS xing_file_count,
SUM ( CASE A.train_id WHEN '3' THEN A.tv_type_count ELSE 0 END) AS shi_type_count,
SUM ( CASE A.train_id WHEN '3' THEN A.tv_file_count ELSE 0 END) AS xis_file_count,
SUM ( CASE A.train_id WHEN '4' THEN A.tv_type_count ELSE 0 END) AS ke_type_count,
SUM ( CASE A.train_id WHEN '4' THEN A.tv_file_count ELSE 0 END) AS tang_file_count 

FROM
	T_SYS_LOG A 
WHERE
	A.org_id = 'xxx'
	GROUP BY A.tv_date,A.ORG_ID
	ORDER BY A.tv_date Desc

在这里根据不同的train_id类型来进行取值,因为每个类型都具有两个关键字段信息,所以在进行一个AS重命名,为了防止在前端出现undefine,如果查询的对应值为空的话,我们ELSE为0,同时根据时间进行分组。
在这里插入图片描述

欢迎大家关注【可为编程】,成长,进步,编程,技术、掌握更多知识!
在这里插入图片描述

这里是一个真诚的***青年技术交流QQ群:761374713***,不管你是大学生、社畜、想学习变成的其他人员,欢迎大家加入我们,一起成长,一起进步,真诚的欢迎你,不管是技术,还是人生,还是学习方法。有道无术,术亦可求,有术无道,止于术。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NotNull1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值