以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]关于SQL用于跨表统计生成临时表展示库存的求助 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=83330) |
-- 作者:舟舟 -- 发布时间:2016/4/6 16:25:00 -- [求助]关于SQL用于跨表统计生成临时表展示库存的求助 外部表。共有三个表,分别是{货物档案}(类别编号,初始库存);{入库明细}(类别编号,入库数量);{出库明细}(类别编号,出库数量)。 其中货物档案中的类别编号是唯一的,入库明细和出库明细中同一个类别编号可能有多次出入库,对应多条记录。 现在的要求是需要使用SQL语句,生成一个临时表,含有,类别编号,入库总量,出库总量三列。 使用的是左连接: 以下内容为程序代码: 1 Select 类别编号,初始库存,sum({入库明细}.[入库数量]) As [入库总量],sum({出库明细}.[出库数量]) As [出库总量] F rom ({货物档案} Left JOIN {入库明细} ON {入库明细}.[类别编号] = {货物档案}.[类别编号]) Left JOIN {出库明细} ON {出库明细}.[类别编号] = {货物档案}.[类别编号] Group By 类别编号,初始库存 但是,生成的表不对,SUM多算了三次。 我的目的实际上就是,定义一个临时表,使用COMMAND从后台取数据。这个临时表要从后台的三个表中提取数据,其中入库明细和出库明细需要计算SUM,再填入临时表中。这个临时表主要是想用于展示每种装备的出入库情况及当前库存。 如果 我这种方法不行,还有其它 方法推荐吗? (另外,上面代码中f rom 中间有个空格,要不然老是说我没有权限,提交参数错误?)
|
-- 作者:大红袍 -- 发布时间:2016/4/6 16:34:00 -- 思路有问题。应该这样写sql语句。
1、 Select 类别编号, 入库数量 as 入库数量, 0 as 出库数量 fr om {入库明细} un ion all Select 类别编号, 0, 出库数量 fr om {出库明细}
2、把1分组统计
Select 类别编号, sum(入库数量) as 入库总量, sum(出库数量) as 出库总量 fr om (1的语句) group by 类别编号
3、如果还要加上初始库存,就这样写
Select 类别编号, 初始库存, 入库总量, 出库总量 fr om (2的语句) as a inner join {货物档案} as b on a.类别编号 = b.类别编号
[此贴子已经被作者于2016/4/7 15:13:35编辑过]
|
-- 作者:舟舟 -- 发布时间:2016/4/7 15:11:00 -- 回复:(大红袍)思路有问题。应该这样写sql语句。&... 谢谢红袍老师,你的思路非常清晰! 我学习了你的思路,又看了说明书,对u nion 和j oin 等又有了深入的了解。 按照你的思路,我重写了S QL代码如下,经测试,完全正确! 以下内容为程序代码: 1 s elect a.类别编号,初始库存,入库总量,出库总量 f rom {货物档案} a left join (select [装备信息_类别编号],sum(入库数量) as 入库总量,sum(出库数量) as 出库总量 f rom (s elect [装备信息_类别编号],[装备信息_数量] as 入库数量,0 as 出库数量 f rom {入库明细} u nion all select [装备信息_类别编号],0 as 入库数量,[装备信息_数量] as 出库数量 f rom {出库明细}) group by [装备信息_类别编号]) b on a.类别编号 = b.装备信息_类别编号 再次表示感谢!
|