求一SQL语句

刀锋的锋 2008-11-03 08:08:39
有4张表分别是:公司表company(comp_id,comp_cn),货物表packing(packing_id,packing_name)
订单表order_packing(order_packing_id,comp_id,time)
实际发放表packingdetail(packingdetail_id,packing_id,order_packing_id,num)
假如有如下数据:
company comp_id comp_cn
10 深圳林业
14 成都必须
packing packing_id packing_name
1 大米
2 油
3 化妆品
4 衣服
order_packing order_packing_id comp_id time
1 10 2008-10-4
2 10 2008-10-16
3 14 2008-10-19
packingdetail packingdetail_id order_packing_id packing_id num
1 1 1 10
2 1 2 20
3 1 4 25
4 2 2 34
5 2 3 33
6 3 1 12
要得到的结果如下:
大米 油 化妆品 衣服
深圳林业 10 54 33 25
成都必须 12
感觉这样好像不可能得到啊?请高手指教如何能写出些SQL
...全文
172 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
刀锋的锋 2008-11-04
  • 打赏
  • 举报
回复
结合各位的意见,终于搞定该SQL,结贴给分,贴出得出结果的SQL。与大家分享
select rs3.name3,
sum(case when rs3.name4='油' then rs3.num5 end) ,
sum(case when rs3.name4='大米' then rs3.num5 end) ,
sum(case when rs3.name4='化妆品' then rs3.num5 end) ,
sum(case when rs3.name4='衣服' then rs3.num5 end)
from
(select rs2.name1 name3,rs1.name2 name4,sum(rs1.num) num5 from
(select p.packing_name as name2,pd.num as num, pd.orderpacking_id as id1 from
packingdetail pd left join packing p on pd.packing_id=p.packing_id ) rs1 ,
(select c.comp_cn as name1,op.orderpacking_id as id from company c left join
order_packing op on c.comp_id=op.comp_id) rs2
where rs1.id1=rs2.id group by rs2.name1,rs1.name2 ) rs3
group by rs3.name3
zjc_love 2008-11-04
  • 打赏
  • 举报
回复
难道我很懒?

我很笨---不会
w111222j 2008-11-04
  • 打赏
  • 举报
回复
呵呵

进来看看

有蛮复杂的,不想搞。
tojavastudy 2008-11-04
  • 打赏
  • 举报
回复
恩恩

学习

左连接估计可以~~~
Hero__008 2008-11-04
  • 打赏
  • 举报
回复
select d.comp_cn,sum(case when r2.packing_name='大米' then r2.num end) "大米",
sum(case when r2.packing_name='油' then r2.num end) "油",
sum(case when r2.packing_name='化妆品' then r2.num end) "化妆品",
sum(case when r2.packing_name='衣服' then r2.num end) "衣服"
from
(select r1.packing_name packing_name,c.comp_id comp_id,sum(r1.num) num
from
(select a.packing_name packing_name,b.order_packing_id order_packing_id,sum(b.num) num from packing a
join packingdetail b on a.packing_id=b.packing_id
group by a.packing_name,b.order_packing_id) r1
join order_packing c on c.order_packing_id=r1.order_packing_id
group by r1.packing_name,c.comp_id) r2
join company d on d.comp_id=r2.comp_id
group by d.comp_cn
耶律火柴 2008-11-04
  • 打赏
  • 举报
回复
为什么一定要用一条语句,存储过程不就结了,
xahaxi 2008-11-04
  • 打赏
  • 举报
回复
路过
eviler 2008-11-03
  • 打赏
  • 举报
回复
这个sql不好写,关键是 货物表 是一个行转列的问题,且货物可能变化,你还是去sql版去问吧
刀锋的锋 2008-11-03
  • 打赏
  • 举报
回复
我已经可以得到如下样式结果:如
深圳林业 大米 10
深圳林业 油 54
深圳林业 化妆品 33
深圳林业 衣服 25
成都必须 大米 12
这是我的SQL
select rs2.name1,rs1.name2,sum(rs1.num) from
(select p.packing_name as name2,pd.num as num, pd.orderpacking_id as id1 from packingdetail pd left join packing p on pd.packing_id=p.packing_id ) rs1 ,
(select c.comp_cn as name1,op.orderpacking_id as id from company c left join order_packing op on c.comp_id=op.comp_id) rs2
where rs1.id1=rs2.id group by rs2.name1,rs1.name2
我在网上看了个行转列的例子,可我对存取过程不熟,老出错,高手啊,帮我年下啊?帮我看下
网上例子:
Select 姓名,
sum(case when 课程='语文' then 成绩 end) As '语文' ,
sum(case when 课程='数学' then 成绩 end) As '数学',
sum(case when 课程='英语' then 成绩 end) As '英语'
From 成绩表 Group By 姓名
可以把:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 英语 93
李四 语文 74
李四 数学 84
李四 英语 94
变成(得到如下结果):
姓名 语文 数学 英语
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
刀锋的锋 2008-11-03
  • 打赏
  • 举报
回复
刚试了个最傻的方法,得出来,不知有没高人帮我忧化下:
select * from
(select p.packing_name as name2,pd.num as num, pd.orderpacking_id as id1 from packingdetail pd left join packing p on pd.packing_id=p.packing_id ) rs1 ,
(select c.comp_cn as name1,op.orderpacking_id as id from company c left join order_packing op on c.comp_id=op.comp_id) rs2
where rs1.id1=rs2.id
刀锋的锋 2008-11-03
  • 打赏
  • 举报
回复
select c.comp_cn,p.packing_name,sum(pd.num) from packingdetail pd left join packing p on pd.packing_id=p.packing_id,packing p left join packingdetail pd on p.packing_id=pd.packing_id,order_packing op left join company c on op.comp_id=c.comp_id group by c.comp_cn,p.packing_name
我是这样写的,可是有错,不知怎么改,期待高手你帮忙

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧