Office中国论坛/Access中国论坛

标题: 如何实现此查询 [打印本页]

作者: iorihong    时间: 2006-10-10 20:00
标题: 如何实现此查询






此表中有入库,出库商品表(其中有期初数量)

要实现的结果是,

如A商品   期初数量   日期  入库数量    出库数量   库存

                10            9-6     50                 20         40

                40            9-10   30               0             70

               70             9-11    0               10             60

这样的结果查询,B商品也如此?先谢谢拉  
[attach]20804[/attach]


[此贴子已经被作者于2006-10-10 16:30:29编辑过]


作者: hi-wzj    时间: 2006-10-10 21:57
我的专栏中有例子可以下载


作者: wwwwa    时间: 2006-10-10 23:47
1、将表中有关数量的字段改为数字型,日期字段改为日期型(RQ);

2、TRY:

SELECT sp, rq1, qcs1+期初数 AS qcs, rk, ck, jc+期初数 AS kcs
FROM (SELECT *,(select sum(rk-ck) from
(SELECT sp, rq1, rk, ck
FROM (SELECT IIF(ISNULL(A.商品),B.商品,A.商品) AS SP,IIF(ISNULL(A.RQ),B.RQ,A.RQ) AS RQ1,
IIF(ISNULL(出库数量),0,出库数量) AS CK,IIF(ISNULL(入库数量),0,入库数量) AS RK,
* FROM (
SELECT *
FROM 出库 A LEFT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ
UNION
SELECT *
FROM 出库 A RIGHT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ)
ORDER BY 1,A.RQ,B.RQ)
) AS BG
where Ya.sp=BG.sp and Ya.RQ1>=BG.RQ1) as jc,
nz((select sum(rk-ck) from
(SELECT sp, rq1, rk, ck
FROM (SELECT IIF(ISNULL(A.商品),B.商品,A.商品) AS SP,IIF(ISNULL(A.RQ),B.RQ,A.RQ) AS RQ1,
IIF(ISNULL(出库数量),0,出库数量) AS CK,IIF(ISNULL(入库数量),0,入库数量) AS RK,
* FROM (
SELECT *
FROM 出库 A LEFT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ
UNION
SELECT *
FROM 出库 A RIGHT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ)
ORDER BY 1,A.RQ,B.RQ)
)
where Ya.sp=sp and Ya.RQ1>RQ1),0) as qcs1 from
(SELECT sp, rq1, rk, ck
FROM (SELECT IIF(ISNULL(A.商品),B.商品,A.商品) AS SP,IIF(ISNULL(A.RQ),B.RQ,A.RQ) AS RQ1,
IIF(ISNULL(出库数量),0,出库数量) AS CK,IIF(ISNULL(入库数量),0,入库数量) AS RK,
* FROM (
SELECT *
FROM 出库 A LEFT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ
UNION
SELECT *
FROM 出库 A RIGHT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ)
ORDER BY 1,A.RQ,B.RQ)
)
Ya) AS b LEFT JOIN 商品表 AS A ON a.商品=b.sp
ORDER BY SP,RQ1




[此贴子已经被作者于2006-10-10 16:17:05编辑过]


作者: wwwwa    时间: 2006-10-10 23:51
将第一个查询的[改为(,]改为),首先将入库、出库记录连接,再进行计算,也可以用生成临时表的方法,SQL语句可以短一些。

[此贴子已经被作者于2006-10-10 16:24:26编辑过]


作者: iorihong    时间: 2006-10-11 00:29
首先感谢两位高手,

hi-wzj版主,能否把您的例子的连接贴一下呢?感谢拉

wwwwa高手,您的sql代码我看不太懂,就是一个查询,还是分几个的,能否改一下,就用我的例子?感谢拉,例子已重新上传了

[此贴子已经被作者于2006-10-10 16:31:38编辑过]


作者: wwwwa    时间: 2006-10-11 00:31
以下是引用iorihong在2006-10-10 16:29:00的发言:


wwwwa高手,您的sql代码我看不太懂,就是一个查询,还是分几个的,能否改一下,就用我的例子?感谢拉

 一个查询,就是用你的数据。
作者: wwwwa    时间: 2006-10-11 00:33
自己慢慢理解吧,可以将

SELECT sp, rq1, rk, ck
FROM (SELECT IIF(ISNULL(A.商品),B.商品,A.商品) AS SP,IIF(ISNULL(A.RQ),B.RQ,A.RQ) AS RQ1,
IIF(ISNULL(出库数量),0,出库数量) AS CK,IIF(ISNULL(入库数量),0,入库数量) AS RK,
* FROM (
SELECT *
FROM 出库 A LEFT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ
UNION
SELECT *
FROM 出库 A RIGHT JOIN 入库 B ON A.商品=B.商品 AND A.RQ=B.RQ)
ORDER BY 1,A.RQ,B.RQ)
生成临时表。
作者: wwwwa    时间: 2006-10-11 00:43
比如临时表为FF

SELECT sp, rq1, qcs1+期初数 AS qcs, rk, ck, jc+期初数 AS kcs
FROM (SELECT *,(select sum(rk-ck) from ff where a.sp=sp and a.RQ1>=RQ1) as jc,
nz((select sum(rk-ck) from ff where a.sp=sp and a.RQ1>RQ1),0) as qcs1 from ff a) AS b LEFT JOIN 商品表 AS A ON a.商品=b.sp;





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3