sql语句的竖列转横列;(50分)

  • 主题发起人 主题发起人 yifeibbs
  • 开始时间 开始时间
Y

yifeibbs

Unregistered / Unconfirmed
GUEST, unregistred user!
sTable.db
库位 货物编号 库存数
1 0101 50
1 0102 60
1 0103 50
2 0101 90
2 0103 100
2 0111 30
3 0101 120
3 0102 110
4 0101 11

只列出表中库位为1、2、3的数据,格式如下:

货物编号 库位1 库位2 库位3
0101 50 90 120
0102 60 110
0103 50 100
0111 30
请问用一句sql语句怎么实现?
 
sql server
select 货物编号,sum(case when 库位=1 then 库存数 else 0 end),
sum(case when 库位=2 then 库存数 else 0 end),
sum(case when 库位=3 then 库存数 else 0 end)
from tab
group by 货物编号
access
sum(iif(库位=1,库存数,0)),
sum(iif(库位=2,库存数,0)),

 
老大,这些个词词俺没见过吖!看来老大的本事是非常厉害,可是俺怎么就运行不动哪?
老大你一定见过速达3000的软件吧,有一些功能俺非常疑惑、羡慕!
它的一个功能好像就是这一条语句的杰作:货品当前库存表。

俺这个paradox数据表该怎么写sql?
列出表中所有库位,格式如下:
货物编号 库位1 库位2 库位3 库位4
0101 50 90 120 11
0102 60 110
0103 50 100
0111 30
请问用一句sql语句怎么实现?
 
select distinct 货物编号,
(select sum(库存数) from "c:/temp/sTable.db" where 货物编号=AAA.货物编号 and 库位=1) 库位1,
(select sum(库存数) from "c:/temp/sTable.db" where 货物编号=AAA.货物编号 and 库位=2) 库位2,
(select sum(库存数) from "c:/temp/sTable.db" where 货物编号=AAA.货物编号 and 库位=3) 库位3,
(select sum(库存数) from "c:/temp/sTable.db" where 货物编号=AAA.货物编号 and 库位=4) 库位4
from "c:/temp/sTable.db" AAA
order by 货物编号

自己试试
 
select a.货物编号,sum(b.库存数),sum(c.库存数),sum(d.库存数)
from stable a
left join (select 货物编号, 库存数 from stable where 库位=1)b on a.货物编号=b货物编号
left join (select 货物编号, 库存数 from stable where 库位=2)c on a.货物编号=c。货物编号
left join (select 货物编号, 库存数 from stable where 库位=3)c on a.货物编号=d。货物编号
group by a.货物编号
 
to:QuickSilver
老兄,你的句子可以正常运行,只是结果中只有一列货物编号,没有任何库存。
to:ugvanxk
老兄,你的这一个句子还是不能运行。看错误提示好像是说在join后面用select不妥。
上一个句子是说在sum后用case when不大好。
 
加一个转制表,形如:
1 1 0 0
2 0 1 0
3 0 0 1
具体自己试吧。
 
用循环作吧。
 
以前我做类似问题都是在程序中用一个过程几个sql解决问题的。可是速度好像不怎么强,
在速达3000中总库存报表汇总速度非常快,应该是一条sql语句。
to: glbboy
老兄,转制表是什么东西呀?该俺讲讲好吗?

在前面我说的库位号不大清楚,应该是一个单独的表store.db
库位号 库位
1 x库
2 y库
3 z库
...
记录数不一定
 
你可以用下列的sql语句
transform sum(库存数) as 库存数 select 货物编号 ,库位 from table where 库位< 4 group by 货物编号
pivot 库位
 
就是多建一个辅助表。具体,根据我上面说的,想想就明白了。
不就是代数系统二元运算的翻版!
 
肯定是要用循环来作的。SQL SERVER中没有transform 这个命令。
 
我决定在程序中摆平这件事![^]
多谢大家捧场![:D]
 
后退
顶部