两个表相减,求sql(100分)

  • 主题发起人 主题发起人 luy
  • 开始时间 开始时间
L

luy

Unregistered / Unconfirmed
GUEST, unregistred user!
一个入库表,一个出库表,有相同的型号,名称,用groupby生成一个同名称,型号
相减的query集。谢谢。
 
舉几個數據﹐沒有Sample誰知道你要寫什么?
 
是相同型号的货品数量相减罢?
select (sum(I.qty) - sum(O.qty)) as SumQty
from InputTable I, OutputTable O
where I.id = O.id
group by I.id


 
楼上写的不对。
这样写的话,如果没有发生出库,只发生入库(或者相反),那么就会选不出数据,写SQL时应该考虑到这一点。
试一试下面这个,在DB2上可以用,其他的数据库没有测试过:

select 名称,型号,sum(入库数量-出库数量) as 库存量 from
(select 名称,型号,入库数量,0 as 出库数量 from 入库表
union all
select 名称,型号,0 as 入库数量,出库数量 from 出库表)
as Tmp group by 名称,型号;
 
上面那位老兄的部分语句应该改为如此:
SUM(IIF(ISNULL(入库数量),0,入库数量)-IIF(ISNULL(出库数量),0,出库数量)) AS 数量
这是ACCESS的写法,如果在SQL SERVER应该是
SUM(ISNULL(入库数量,0)-ISNULL(出库数量,0))
因为会有可能出现某名称,某型号有入库没出库或有出库没入库的情况,也就是
SUM(NULL-出库数量)或SUM(入库数量-NULL),这两种的公式的计算结果都有可能是错误。
所以要加上为空转换的语句来处理。
还有,建议你加一个产品编号,来标准相同名称和型号的产品,不然你的库存SQL语句中
要对两个关键字段进行JOIN,不是很好。
 
是不是要做盘点了,你的这个表结构首先有一些问题,你应该加上批号,然后专门用一个表
来记库存,这样就方便了
 
赞成oceanwave de 写法
 
谢谢各位!我是用dbisam做的,反正写出来总是"invalid use select",谁能帮我写出能运行的,再加
50分,(估计paradox 与dbisam是相同的)
 
SELECT * FROM 近库 WHERE ID NOT IS (SELECT ID FROM 出库)
 
加个库存流水帐不更好吗
 
多人接受答案了。
 
后退
顶部