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


数据库中有表记录:客户名称,商品类型,购买数量。
需要转换成:每个客户买的各种类型的商品总量是多少。
这里可以用到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`;
参考
博客介绍了数据库中竖表数据转横表数据的方法。对于支持pivot函数的Oracle和SQL Server数据库,可使用该函数进行行列转换;对于暂不支持的MySQL数据库,则需通过子查询,结合sum和group by实现行列转换,并给出了相应SQL示例。

1724

被折叠的 条评论
为什么被折叠?



