select 商品名称,a.商品总量-b.出库数量 as 库存 from AAA inner join (select 商品名称,sum( 出库数量)出库数量 from BBB group by 商品名称)b on a.商品名称=b.商品名称
更正: select 商品名称,a.商品总量-b.出库数量 as 库存 from a inner join (select 商品名称,sum( 出库数量)出库数量 from BBB group by 商品名称)b on a.商品名称=b.商品名称
select aaa.商品名称,商品总量-ck as 剩余数量 from aaa, (select 商品名称,sum(出库数量) as ck from bbb group by 商品名称) as b where a.商品名称=b.商品名称
select a.商品名称,sum(a.商品总量)-sum(a.出库数量) from AAA a,BBB b where a.商品名称=b.商品名称 group by a.商品名称,b.商品名称
select a.id ,a.j - sum(b.c) as num from test1 a,test2 b where a.id = b.id group by a.id,a.j test1 ---表1 test2 ---表2
select AAA.商品名称,sum(AAA.商品总量)-sum(BBB.出库数量) from AAA ,BBB where AAA.商品名称=BBB.商品名称 group by AAA.商品名称
declare @AAA table (商品名称 varchar(10), 商品总量 int) insert into @AAA values('A',100) insert into @AAA values('B',120)declare @BBB table (商品名称 varchar(10), 出库数量 int) insert into @BBB values('A', 10) insert into @BBB values('A', 20) insert into @BBB values('B', 10) insert into @BBB values('B', 20) insert into @BBB values('B', 30)select TA.商品名称,A-B AS 剩余数量 FROM (select 商品名称,sum(商品总量) AS A from @AAA group by 商品名称)TA, (select 商品名称,sum(出库数量) AS B from @BBB group by 商品名称)TB where TA.商品名称=TB.商品名称
看来大家普遍是Niguna(幽灵) 那样想的,其实那是错误的
幽灵,你看看 select AAA.商品名称,AAA.商品总量,BBB.出库数量, AAA.商品总量-BBB.出库数量 from AAA ,BBB where AAA.商品名称=BBB.商品名称 的结果就能想出错在哪了。
select 商品名称,sum(商品总量) from (select * from aaa union all select 商品名称,-出库数量 from bbb) group by 商品名称
select 商品名称,sum(商品总量) 剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称
CABO(白椒腊肉)写的错了,但只要更正一下就可行;select A.商品名称,a.商品总量-sum(B.出库数量) from test1 A,test2 B where A.商品名称=B.商品名称 group by A.商品名称,a.商品总量
test1---AAA test2---BBB
这些好象没有一个是对的,我试出了一个,检验过,是正确的! select AAA.商品名称, sum(AAA.商品总量)/count(BBB.商品名称)-sum(BBB.出库数量) from AAA,BBB where AAA.商品名称=BBB.商品名称 group by BBB.商品名称相信我,你自己可以试一试!
select 商品名称,sum(商品总量) 剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称个人认为上述代码比较好
select 商品名称,sum(商品总量) from (select aa,商品总量 from aaa union all select 商品名称,-1*出库数量 商品总量 from bbb) group by 商品名称
哦,少了个别名select 商品名称,sum(商品总量) from (select aa,商品总量 from aaa union all select 商品名称,-1*出库数量 商品总量 from bbb) a group by 商品名称
to MeteorOnNet(大狼) 你的这个SQL语句有一点缺陷,要是这样的情况就不对了 表一(AAA) 商品名称 商品总量 A 100 B 120 C 200表二(BBB) 商品名称 出库数量 A 10 A 20 B 10 B 20 B 30 算出商品A,B,C目前还剩多少
表一(AAA) 商品名称 商品总量 A 100 B 120表二(BBB) 商品名称 出库数量 A 10 A 20 B 10 B 20 B 30用一条SQL语句算出商品A,B目前还剩多少? ---->select AAA.商品总量-B.总出库数量 from AAA , (select sum(出库数量) 总出库数量, 商品名称 from BBB group by 商品名称) B where AAA.商品名称 = B.商品名称
select a.商品名称, 剩余数量 = a.商品总量 - b.出库数量 from AAA a, (select 商品名称, 出库数量 = sum(出库数量) from BBB group by 商品名称) b where a.商品名称 = b.商品名称 /*绝对正确*/
to cocoafox(阿菜) and pengdali(大力) 有道理:下面我改进一下,还有我说过的话,多谢指点! ////////////////////////////////// select a.商品名称 , a.商品总量 - b.出库数量 as 剩余数量 from AAA a, (select 商品名称, 出库数量 = sum(出库数量) from BBB group by 商品名称) b where a.商品名称 * = b.商品名称 ////////////////////////////////// 在where子句加一个左外部连接!
第一次来这儿,细看了一下每一个朋友的代码 发现思路一共有三种: 1。 CABO(白椒腊肉)类,很多人就是这样想的,不过有一个问题是 不使用内联语句就简单的判断两个列值相同然后就输出结果2。小马哥类,AAA表中是否有相同的商品我们可以不管思路都一样! 如果AAA表中的商品在BBB表中都一定能卖出的话那么这种思路就是对的 我来说说这种思路:先分别使用两个SELECT语句把AAA表和BBB表中的 商品相同的行合并(等于重新生成了两个表并且商品名全部都不同了), 然后再使用INNER JOIN语句联结两个表,但是INNER JOIN有一个毛病是 两个表中一定要有商品名列列值相同才行!比如说AAA表中有一种商品名 在BBB表中没有那个这个商品就不会出现在结果中了select na1,convert(int,pr1)-convert(int,pr2) from (select na1, pr1=sum(convert(int,pr1)) from a group by na1) as j inner join (select na2, pr2=sum(convert(int,pr2)) from B group by na2) as p on j.na1=p.na23。我和大力的算法:把两个表用UNION语句联结起来(形成一个新表)并且 把BBB表中的出货数转为负数,然后再用一个聚合函数加上GROUP BY就可以了! 这样即使AAA表中有商品一个都没买出也会记录在结果中!而且AAA表中是否有 相同的商品也可以不管:)elect na1,pr1=sum(pr1) from (select * from a union all select na2,pr2=-convert(int,pr2) from b) a group by a.na1另外: MeteorOnNet(大狼)的思路我一点都没懂:( 我表成两个表 A na1 pr1 c 100 d 100 c 10 f 10B na2 pr2 c 10 c 10 d 1
(select 商品名称,sum( 出库数量)出库数量 from BBB group by 商品名称)b on a.商品名称=b.商品名称
select 商品名称,a.商品总量-b.出库数量 as 库存 from a inner join
(select 商品名称,sum( 出库数量)出库数量 from BBB group by 商品名称)b on a.商品名称=b.商品名称
(select 商品名称,sum(出库数量) as ck from bbb
group by 商品名称) as b
where a.商品名称=b.商品名称
from AAA a,BBB b
where a.商品名称=b.商品名称
group by a.商品名称,b.商品名称
test1 ---表1
test2 ---表2
from AAA ,BBB
where AAA.商品名称=BBB.商品名称
group by AAA.商品名称
insert into @AAA values('A',100)
insert into @AAA values('B',120)declare @BBB table (商品名称 varchar(10), 出库数量 int)
insert into @BBB values('A', 10)
insert into @BBB values('A', 20)
insert into @BBB values('B', 10)
insert into @BBB values('B', 20)
insert into @BBB values('B', 30)select TA.商品名称,A-B AS 剩余数量 FROM
(select 商品名称,sum(商品总量) AS A
from @AAA
group by 商品名称)TA,
(select 商品名称,sum(出库数量) AS B
from @BBB
group by 商品名称)TB
where TA.商品名称=TB.商品名称
select AAA.商品名称,AAA.商品总量,BBB.出库数量, AAA.商品总量-BBB.出库数量
from AAA ,BBB
where AAA.商品名称=BBB.商品名称
的结果就能想出错在哪了。
where A.商品名称=B.商品名称 group by A.商品名称,a.商品总量
test1---AAA
test2---BBB
select AAA.商品名称,
sum(AAA.商品总量)/count(BBB.商品名称)-sum(BBB.出库数量)
from AAA,BBB
where AAA.商品名称=BBB.商品名称
group by BBB.商品名称相信我,你自己可以试一试!
若表AAA 中商品名称可重复用我的方法
若不重复用大力的更方便
to:19191919(红围巾) ,同意你的说法,因为我不知道楼主的表AAA的具体结构
只能来个通用版了
你的这个SQL语句有一点缺陷,要是这样的情况就不对了
表一(AAA)
商品名称 商品总量
A 100
B 120
C 200表二(BBB)
商品名称 出库数量
A 10
A 20
B 10
B 20
B 30
算出商品A,B,C目前还剩多少
商品名称 商品总量
A 100
B 120表二(BBB)
商品名称 出库数量
A 10
A 20
B 10
B 20
B 30用一条SQL语句算出商品A,B目前还剩多少?
---->select AAA.商品总量-B.总出库数量
from AAA ,
(select sum(出库数量) 总出库数量, 商品名称 from BBB group by 商品名称) B
where AAA.商品名称 = B.商品名称
from
AAA a,
(select 商品名称, 出库数量 = sum(出库数量) from BBB group by 商品名称) b
where a.商品名称 = b.商品名称
/*绝对正确*/
有道理:下面我改进一下,还有我说过的话,多谢指点!
//////////////////////////////////
select a.商品名称 , a.商品总量 - b.出库数量 as 剩余数量
from AAA a,
(select 商品名称, 出库数量 = sum(出库数量) from BBB group by 商品名称) b
where a.商品名称 * = b.商品名称
//////////////////////////////////
在where子句加一个左外部连接!
发现思路一共有三种:
1。 CABO(白椒腊肉)类,很多人就是这样想的,不过有一个问题是
不使用内联语句就简单的判断两个列值相同然后就输出结果2。小马哥类,AAA表中是否有相同的商品我们可以不管思路都一样!
如果AAA表中的商品在BBB表中都一定能卖出的话那么这种思路就是对的
我来说说这种思路:先分别使用两个SELECT语句把AAA表和BBB表中的
商品相同的行合并(等于重新生成了两个表并且商品名全部都不同了),
然后再使用INNER JOIN语句联结两个表,但是INNER JOIN有一个毛病是
两个表中一定要有商品名列列值相同才行!比如说AAA表中有一种商品名
在BBB表中没有那个这个商品就不会出现在结果中了select na1,convert(int,pr1)-convert(int,pr2) from
(select na1, pr1=sum(convert(int,pr1)) from a group by na1) as j
inner join
(select na2, pr2=sum(convert(int,pr2)) from B group by na2) as p
on j.na1=p.na23。我和大力的算法:把两个表用UNION语句联结起来(形成一个新表)并且
把BBB表中的出货数转为负数,然后再用一个聚合函数加上GROUP BY就可以了!
这样即使AAA表中有商品一个都没买出也会记录在结果中!而且AAA表中是否有
相同的商品也可以不管:)elect na1,pr1=sum(pr1) from (select * from a union all select na2,pr2=-convert(int,pr2) from b) a group by a.na1另外: MeteorOnNet(大狼)的思路我一点都没懂:(
我表成两个表
A
na1 pr1
c 100
d 100
c 10
f 10B
na2 pr2
c 10
c 10
d 1