求SQL语句(50分)

  • 主题发起人 主题发起人 zqwzz
  • 开始时间 开始时间
Z

zqwzz

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个产品表如下:

产品 日期 数量
A 01-8-1 10
A 01-9-10 20
A 01-10-1 30
B 01-9-1 40
B 01-10-10 50

求SQL语句,可以产品分组,累加数量值。结果如下:

产品 日期 数量 累计数量
A 01-8-1 10 10
A 01-9-10 20 30
A 01-10-1 30 60
B 01-9-1 40 40
B 01-10-10 50 90
 
SELECT A.产品, A.日期, A.数量,(select sum(b.数量) as 累计数量 from 产品表 b where b.产品=a.产品 group by b.产品 )
FROM 产品 A

搞定!
 
Adnil,你的SQL看不懂哟!
 
错了一点点

SELECT A.产品, A.日期, A.数量,(select sum(b.数量) as 累计数量 from 产品表 b where b.产品=a.产品 group by b.产品 )
FROM 产品 A
应该是
SELECT A.产品, A.日期, A.数量,(select sum(b.数量) as 累计数量 from 产品表 b where b.产品=a.产品 group by b.产品 )
FROM 产品表 A

你这里没有给出字段名,我只能用中文代替
 
to Adnil:
你这个SQL自己试过吗?
应该是:
SELECT A.产品, A.日期, A.数量,(select sum(b.数量) as 累计数量 from 产品表 b where b.产品=a.产品 and b.日期 <= a.日期 )
FROM 产品表 A order by A.产品, A.日期
 
关注!
if (edit1.text<>'') and (edit2.text<>'') and (edit3.text<>'') then
sql.add('select * from sjswt where wtgddm='+edit1.text+' and wtzqdm='+edit2.text+' and wthtxh like "'+edit3.text+'%"');
if (edit1.text<>'') and (edit2.text<>'') then
sql.add('select * from sjswt where wtgddm='''+edit1.text+''' and wtzqdm='''+edit2.text+'''');
if (edit1.text<>'') and (edit3.text<>'') then
sql.add('select * from sjswt where wtgddm='+edit1.text+' and wthtxh like "'+edit3.text+'%"');
if (edit2.text<>'') and (edit3.text<>'') then
sql.add('select * from sjswt where wtzqdm='+edit1.text+' and wthtxh like "'+edit3.text+'%"');
edit1 和edit2用于精确查询,edit3用于模糊查询,这样写可是不能运行,不知错在什么地方?
 
to adnil:
B.数量  //是从哪个表来的,小弟不太明折,请指教
 
少写个日期字段不是主要问题,
b.日期 <= a.日期 这个倒是我的疏漏了,呵呵!

To xiaofeng,

B.数量是表别名B的字段“数量”
 
用一个子查询就可以了,
SELECT A.产品, A.日期, A.数量,(select sum(b.数量) as 累计数量 from 产品表 b where b.产品=a.产品 and b.日期 <= a.日期 )
FROM 产品表 A order by A.产品, A.日期
ok!!
 
TO:bluerain
你的SQL对上面的问题是正确的答案。
不过我上面的表,是从记录中抽出的一部分,在具体应用中,有一些其他的问题。比如:
表名:产品表

产品 日期 数量 规格
A 01-8-1 10 1
A 01-9-10 20 1
A 01-9-10 10 2
A 01-10-1 30 1
B 01-9-1 40 1
B 01-10-10 50 1
这个表中有两个记录的产品,和日期一样。这种情况下用上述办法累加数量,将不会得到想要的结果。
该如何作?
 
(select c.产品,c.日期,Sum(c.数量) 数量 from 产品表 c group by 产品,日期)这个数据
集是将类似
产品 日期 数量 规格
A 01-9-10 20 1
A 01-9-10 10 2
的记录累加成
产品 日期 数量
A 01-9-10 30
这样就成为你最初提的那个问题了,所以也只要在原来可以得sql中将
'产品表 b',和'产品表 A'替换成
(select c.产品,c.日期,Sum(c.数量) 数量 from 产品表 c group by 产品,日期) b和
(select c.产品,c.日期,Sum(c.数量) 数量 from 产品表 c group by 产品,日期) a
就可以了.

完整的SQL如下:

SELECT A.产品, A.日期, A.数量,
(select sum(b.数量) as 累计数量 from
(select c.产品,c.日期,Sum(c.数量) 数量 from 产品表 c group by 产品,日期) b where b.产品=a.产品 and b.日期 <= a.日期 )
FROM
(select c.产品,c.日期,Sum(c.数量) 数量 from 产品表 c group by 产品,日期) A order by A.产品, A.日期
 

Similar threads

S
回复
0
查看
850
SUNSTONE的Delphi笔记
S
S
回复
0
查看
782
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部