还是关于 SQL 语句
已知表A 表B 求表C的SQL语句
表A:
NO 名称 数量
1 A 10
2 B 20
3 A 30
4 B 40
表B:
名称 数量
A 100
B 200
A 300
B 400
表C:
NO. 名称 数量A 数量B 数量C
1 A 10 400 -390
2 B 20 600 -580
3 A 30 -360
4 B 40 -540
数B 为表B 同一名称的数量合计,数量C 为数量A - 数量C 的分别累计
注意:3,4 中的数量B 不要显示出来,也就是说同一名称的数量B 只显示一次
问题点数:30、回复次数:8Top
1 楼TT008(T T)回复于 2002-03-27 16:39:35 得分 0
以下语句要怎么样改才可以?
select a.*,(select sum(数量) from b where 名称=TA.名称) as 数量B,
(select sum(数量) from A where 名称=TA.名称 AND NO<=TA.NO)-(select sum(数量) from b where 名称=TA.名称) as 数量C
from a TA
不知道这用 SQL 能不能实现?!!!Top
2 楼TT008(T T)回复于 2002-03-27 16:48:53 得分 0
数量B是表B数量的合计,在查询中只显示同一名称合计数量一次
不知道这用SQL语句能不能实现?Top
3 楼TT008(T T)回复于 2002-03-27 16:55:29 得分 0
SELECT 单NO, 名称, 数量 AS 数量A, (select sum(数量) from BB where 名称=TA.名称) AS 数量B, ((select sum(数量) from AA where 名称=TA.名称 AND 单NO<=TA.单NO)-(select sum(数量) from BB where 名称=TA.名称)) AS 数量C
FROM AA AS TA
不知要如何改上面的语句才可实现以上功能
Top
4 楼icevi(按钮工厂)回复于 2002-03-27 18:17:41 得分 0
select ta.id,ta.name,ta.mount as mounta,
case when t3.mount is null then t2.mount else 0 end as mountb,
ta.mount+isnull(t3.mount,0)-t2.mount as mountc
from
(select ta.id,sum(tb.mount) as mount
from ta join tb on ta.name=tb.name
group by ta.id) t2
left join
(select t1.id,sum(ta.mount) as mount
from ta join ta t1 on ta.id<t1.id and ta.name=t1.name
group by t1.id) t3
on t2.id=t3.id
join ta on t2.id=ta.idTop
5 楼TT008(T T)回复于 2002-03-27 19:41:04 得分 0
太高深了,看不懂
可否解释一下?
在ACCESS2000里是否可以测试?Top
6 楼iamknight(侠客)回复于 2002-03-27 20:01:52 得分 0
为什么非得在一个SQL语句中解决呢。
如果采用存储过程来解决这个问题是不是更容易一些,维护起来也方便了些呢?Top
7 楼TT008(T T)回复于 2002-03-27 20:16:04 得分 0
用存储过程,我是要查询出表C,所以要用SQL语句
Top
8 楼icevi(按钮工厂)回复于 2002-03-28 08:56:35 得分 0
我用的是SQL SERVER 2000,这个论坛也是SQL SERVER的,你可以转到数据库基础版去问,在这里要是不明说,都会以为你是MSSQL的。
用ACCESS可能可以用一条语句搞定。我还没有试。Top
9 楼icevi(按钮工厂)回复于 2002-03-28 09:17:13 得分 30
SELECT TA.ID, TA.Name, TA.mount AS mounta,
IIf(IsNull((SELECT sum(t3.mount) FROM ta as t3
INNER JOIN ta AS t1 ON (t3.name=t1.name) AND (t3.id<t1.id)
where t1.id=ta.id)),
(SELECT sum(tb.mount)
FROM ta as t2 INNER JOIN tb
ON t2.name=tb.name where t2.id=ta.id),0) AS mountb,
(SELECT iif(isnull(sum(t3.mount)),0,sum(t3.mount))
FROM ta as t3 INNER JOIN ta AS t1 ON (t3.name=t1.name) AND (t3.id<t1.id)
where t1.id=ta.id)
+[mount]-
(SELECT sum(tb.mount)
FROM ta as t2 INNER JOIN tb ON t2.name=tb.name
where t2.id=ta.id) AS mountc
FROM TA;
Top




