面试题:oracle数据库行转列的问题

本文介绍了一种使用SQL实现的数据转换方法,即将表中的行数据转换为列数据。通过一个具体的例子,展示了如何利用SUM函数结合CASE WHEN语句来完成这一操作。此方法适用于需要按不同仓库汇总产品库存的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

今天我一个学弟问了一个面试题:

有表A,结构如下:
A: p_ID p_Num s_id
1 10 01
1 12 02
2 8 01
3 11 01
3 8 03
其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为:
p_ID s1_id s2_id s3_id
1 10 12 0
2 8 0 0
3 11 0 8
其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

 

 

答案是

 

select p_id,
sum(case when s_id = "1" then p_num else 0 end) s1_id,
sum(case when s_id = "2" then p_num else 0 end) s2_id,
sum(case when s_id = "3" then p_num else 0 end) s3_id
from A group by p_id

 

 

这其实是一个oracle的行转列的题目,以前做过,刚才问到我的时候,突然没反应过来,现在做个随笔,以便自己记住。

行转列  用sum函数   格式是sum(case when 条件 then 统计的列 else ... end ) 转完之后的列名

转载于:https://www.cnblogs.com/zhyStudy/p/9112021.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值