在我做的进销存系统中有一个日结表:
比如:我的库存项目中有200种商品,每天日结时在日结表中会新添加200条记录,这200条记录是200种商品当天的进销存情况(包括当天的期初和期末余额m入库、出库情况,并且在日结时每条记录都有当天的日期)。
要求:用户给出一个时间段,如:2004-2-6 到 2004-3-6 ,根据这个时间段列出这200种商品在此期间的期初、期末余额、入库、出库等信息。用sql语句如何完成?另注:请问我的这种日结方法是否合理,请给出建议!表结构如下:
商品编号
商品名称
单位
期初余额
期末余额
入库量
出库量
日结时间
比如:我的库存项目中有200种商品,每天日结时在日结表中会新添加200条记录,这200条记录是200种商品当天的进销存情况(包括当天的期初和期末余额m入库、出库情况,并且在日结时每条记录都有当天的日期)。
要求:用户给出一个时间段,如:2004-2-6 到 2004-3-6 ,根据这个时间段列出这200种商品在此期间的期初、期末余额、入库、出库等信息。用sql语句如何完成?另注:请问我的这种日结方法是否合理,请给出建议!表结构如下:
商品编号
商品名称
单位
期初余额
期末余额
入库量
出库量
日结时间
where "日结时间" between "2004-2-6"and "2004-3-6'如果没理解错的话,应该是这样
Select sum(a) a,... from Tbl1
where between(d1,d2)
group by (类别)
order by (类别)
仅供参考。
商品名称 期初余额 期末余额 入库量 出库量 from Table1
where "日结时间" between "2004-2-6"and "2004-3-6'
**没有冷场嘛,大家不是在想办法吗?下面的代码可能不太成熟,不过你可以试试能否得到你要的结果。
SELECT 商品编号, 商品名称, 单位, SUM(期初余额), SUM(期末余额), SUM(入库量), SUM(出库量)
FROM [日结表]
WHERE 日结时间 BETWEEN '2004-2-6' and '2004-3-6'
GROUP BY (商品编号, 商品名称, 单位)
ORDER BY 商品编号
SUM(期初余额), SUM(期末余额)?
期初余额和期末余额是不能相加的,期初余额应该取2004-2-6日的期初余额,期末余额应该取2004-3-6日的期末余额!
(SELECT 期初余额
FROM 日结表 t
WHERE t.商品编号 = 商品编号 AND 日结时间 = '2004-2-6') AS 期初余额,
(SELECT 期末余额
FROM 日结表 t
WHERE t.商品编号 = 商品编号 AND 日结时间 = '2004-3-6') AS 期末余额, SUM(入库量) AS 入库量, SUM(出库量)
AS 出库量
FROM 日结表
WHERE (日结时间 BETWEEN '2004-2-6' AND '2004 - 3 - 6 ')
GROUP BY 商品编号, 商品名称,单位
ORDER BY BH
是不是哪有问题?
SELECT A..商品编号, A.商品名称, A.单位, B.期初余额, C.期末余额, A.SUM(入库量), A.SUM(出库量)
FROM 日结表 A,日结表 B,日结表 C
WHERE A.日结时间 BETWEEN '2004-2-6' and '2004-3-6'
AND A.商品编号 = B.商品编号 AND B.日结时间 = '2004-2-6'
AND A.商品编号 = C.商品编号 AND C.日结时间 = '2004-2-6'
GROUP BY (A.商品编号, A.商品名称, A.单位,B.期初余额, C.期末余额)
ORDER BY A.商品编号
FROM 日结表 t
WHERE t.商品编号 = 商品编号 AND 日结时间 = '2004-2-6') AS 期初余额,
(SELECT 期末余额
FROM 日结表 t
WHERE t.商品编号 = 商品编号 AND 日结时间 = '2004-3-6') AS 期末余额,以上两个子查询有问题,它返回了所有商品的期初和期末余额(子查询不允许返回多个值),怎样才能让它返回当前记录的期初和期末余额?
FROM xfxm_day b
WHERE (xfxm_pcsj Between '9/9/2004' And '9/11/2004')
GROUP BY [xfxm_bm], [xfxm_mc], [xfxm_jjdw]
ORDER BY [xfxm_bm];
谢谢lwk_hlj(阿凯(CSDN第一铁公鸡横空出世))和其它热心人,你的方法如果只有一种商品还行,
我稍做修改, FROM xfxm_day b ,在子查询中引用t.xfxm_bm=b.xfxm_bm就可以了!
我第一次发贴,怎样给分呀?
from
(SELECT 商品编号, 商品名称,单位,SUM(入库量) AS 入库量, SUM(出库量) AS 出库量
FROM ttemp
WHERE 日结时间 BETWEEN '2004-01-01 01:00' AND '2004-01-02 24:00'
GROUP BY 商品编号,商品名称,单位) a left join(SELECT 商品编号, MIN(期初余额) AS 期初余额
FROM TTemp
WHERE (日结时间 =
(SELECT MIN(日结时间) AS 日结时间
FROM ttemp
WHERE 日结时间 BETWEEN '2004-01-01 01:00' AND '2004-01-02 24:00'))
GROUP BY 商品编号) b on a.商品编号=b.商品编号 left join
(SELECT 商品编号, MIN(期末余额) AS 期末余额
FROM TTemp
WHERE (日结时间 =
(SELECT MAX(日结时间) AS 日结时间
FROM ttemp
WHERE 日结时间 BETWEEN '2004-01-01 01:00' AND '2004-01-02 24:00'))
GROUP BY 商品编号) c on a.商品编号=c.商品编号
此语句在sql2000查询分析中调试通过。
不知道和lwk_hlj的方法哪个效率会更高一些?
我建议:要么说思想,要么写代码就尽量写对。
(select 期初余额 from a where 日结时间='2004-2-6') as 期初余额,
(select 期初余额 from a where 日结时间='2004-3-6') as 期末余额,
SUM(入库量) as 入库量,
SUM(出库量) as 出库量
FROM
(select * from 日结表
where 日结时间
BETWEEN '2004-2-6' and '2004-3-6'
order by 商品编号,商品名称,单位
GROUP BY (商品编号, 商品名称, 单位)
ORDER BY A.商品编号
) A
那你的意思,你不要做程序了,全给别人做吧!