日期:2014-05-17  浏览次数:20482 次

求教:我有个表有入库时间,有出库时间,我想得到该样式号每月的销售和历史库存
库结构大概是这样:
货号 样式号 入库时间 出库时间
a001 10 2011-1-10
b002 10 2011-1-10 2011-2-1
c003 10 2012-1-15 2012-2-2
d004 10 2013-2-3 2013-1-5
e005 10 2013-2-3
f006 15 2011-2-15 2011-3-16
g007 15 2011-2-16 2012-3-16
h009 15 2013-1-10
m012 18 2011-1-4
c009 18 2011-4-5 2012-5-6
f008 18 2012-2-19 2013-1-1
e008 18 2013-1-5 2013-2-6




我想得到的结果:
样式号 日期 销售件数 库存件数
10 2011-2 1 1
10 2012-2 1 1
10 2013-1 1 2
15 2011-3 1 0
15 2012-3 1 1
18 2012-5 1 1
18 2013-1 1 1
18 2013-2 1 1

------解决方案--------------------

;WITH cte AS (
SELECT 货号,样式号,入库时间, 出库时间,
CASE WHEN 出库时间 IS NOT NULL THEN 1 ELSE 0 END AS 销售
FROM #a 
)
SELECT cte.样式号,CONVERT(VARCHAR(7),cte.出库时间) AS 日期,cte.销售,(
SELECT ISNULL(SUM(CASE WHEN 出库时间 IS NULL THEN 1 ELSE 0 END),0)
FROM #a WHERE #a.样式号=cte.样式号 AND #a.入库时间<cte.出库时间
) AS 库存
FROM cte
WHERE cte.出库时间 IS NOT NULL


样式号         日期      销售          库存
----------- ------- ----------- -----------
10          2011-02 1           1
10          2012-02 1           1
10          2013-01 1           2
15          2011-03 1           0
15          2012-03 1           0
18          2012-05 1           1
18          2013-01 1           1
18          2013-02 1           1

(8 行受影响)