数据库行列转换技巧

博客介绍了数据库中竖表数据转横表数据的方法。对于支持pivot函数的Oracle和SQL Server数据库,可使用该函数进行行列转换;对于暂不支持的MySQL数据库,则需通过子查询,结合sum和group by实现行列转换,并给出了相应SQL示例。

在日常工作中,很有可能碰到需要把竖表的数据转换成横表数据的情况。

如:

数据库中有表记录:客户名称,商品类型,购买数量。

 

需要转换成:每个客户买的各种类型的商品总量是多少。

 

这里可以用到oracle的  pivot 函数,这个函数可以方便的将行列进行准换。(sqlserver 也支持)


select *
from order_list pivot xml( --pivot xml 以xml的形式输出
sum(salesNum) for shangPin in (
select distinct shangPin from order_list --通过查询查出所有需要转列的值,即所有列名
)
);

 

如果像是mysql这种暂时还没有pivot函数支持的数据库的话。

就需要用到子查询:

先做出几个字段:上衣数量,裤子数量。。。等

然后再用一个 sum 和groupby 客户 

就可以横表转竖表了;

 

类似sql:

SELECT `kehu`,
SUM(shangyi_num) '上衣数量',
SUM(maozi_num) '帽子数量'

FROM (
SELECT `kehu`,

CASE WHEN `shangpin`= '上衣' THEN
sales_num
END shangyi_num,
CASE WHEN `shangpin`= '帽子' THEN
sales_num
END maozi_num

FROM order_list) t
GROUP BY `kehu`;

 

参考

https://blog.csdn.net/huay_li/article/details/82914161

https://blog.csdn.net/sperospera/article/details/89199806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值