27,579
社区成员
发帖
与我相关
我的任务
分享
SELECT * into #t
FROM ( SELECT 月份 = CONVERT(VARCHAR(7), riqi, 120) ,
类别 = leibie ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END), 0) 入库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 出库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END) - SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 库存总量
FROM churuku
GROUP BY CONVERT(VARCHAR(7), riqi, 120) ,
leibie
UNION ALL
SELECT 月份 = CONVERT(VARCHAR(7), riqi, 120) ,
'本月合计' ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END), 0) 入库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 出库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END) - SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 库存总量
FROM churuku
GROUP BY CONVERT(VARCHAR(7), riqi, 120)
) aa
ORDER BY 月份 ,
CHARINDEX('甲', 类别) DESC ,
CHARINDEX('乙', 类别) DESC ,
CHARINDEX('丙', 类别) DESC ,
CHARINDEX('丁', 类别) DESC ,
CHARINDEX('本', 类别) DESC
select *,(select sum(入库总量) from #t
where 月份<=t.月份 and 类别=t.类别) as 累计入库
,(select sum(出库总量) from #t
where 月份<=t.月份 and 类别=t.类别) as 累计出库
, (select sum(入库总量) from #t
where 月份<=t.月份 and 类别=t.类别)-
(select sum(出库总量) from #t
where 月份<=t.月份 and 类别=t.类别) as 当月库存
from #t t
drop table #t
/*
月份 类别 入库总量 出库总量 库存总量 累计入库 累计出库 当月库存
------- --------------- ----------- ----------- ----------- ----------- ----------- -----------
2011-01 甲产品 130 2 128 130 2 128
2011-01 乙产品 8 4 4 8 4 4
2011-01 本月合计 138 6 132 138 6 132
2011-02 甲产品 20 0 0 150 2 148
2011-02 乙产品 0 1 0 8 5 3
2011-02 丙产品 10 0 0 10 0 10
2011-02 丁产品 2 0 0 2 0 2
2011-02 本月合计 32 1 31 170 7 163
2011-03 乙产品 10 0 0 18 5 13
2011-03 丙产品 0 2 0 10 2 8
2011-03 本月合计 10 2 8 180 9 171
*/
月份 类别 当月入库 当月出库 库存新增 累计入库 累计出库 当月库存
------- -------- -------- -------- -------- -------- -------- --------
2011-01 甲产品 130 2 128 130 2 128
2011-01 乙产品 8 4 4 8 0 4
2011-01 本月合计 138 6 132 138 6 132
2011-02 甲产品 20 0 20 150 2 148
2011-02 乙产品 0 1 -1 8 5 3
2011-02 丙产品 10 0 10 10 0 10
2011-02 丁产品 2 0 2 2 0 2
2011-02 本月合计 32 1 31 170 7 163
2011-03 甲产品 0 0 0 150 2 148
2011-03 乙产品 10 0 10 18 5 13
2011-03 丙产品 0 2 -2 10 2 8
2011-03 丁产品 0 0 0 2 0 2
2011-03 本月合计 10 2 8 180 9 171
/*
月份 类别 当月入库 当月出库 库存新增 累计入库 累计出库 当月库存
------- -------- -------- -------- -------- -------- -------- --------
2011-01 甲产品 130 2 128 130 2 128
2011-01 乙产品 8 4 4 8 0 4
2011-01 本月合计 138 6 132 138 6 132 --倒数第二个6为什么是上面2+0的和
2011-02 甲产品 20 0 20 150 2 148 --150是怎么算出来的
2011-02 乙产品 0 1 -1 8 5 3 --累计入库的8是怎么算出来的?
2011-02 丙产品 10 0 10 10 0 10
2011-02 丁产品 2 0 2 2 0 2
2011-02 本月合计 32 1 31 170 7 163
2011-03 甲产品 0 0 0 150 2 148
2011-03 乙产品 10 0 10 18 5 13
2011-03 丙产品 0 2 -2 10 2 8
2011-03 丁产品 0 0 0 2 0 2
2011-03 本月合计 10 2 8 180 9 171
*/
SELECT *
FROM ( SELECT 月份 = CONVERT(VARCHAR(7), riqi, 120) ,
类别 = leibie ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END), 0) 入库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 出库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END) - SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 库存总量
FROM churuku
GROUP BY CONVERT(VARCHAR(7), riqi, 120) ,
leibie
UNION ALL
SELECT 月份 = CONVERT(VARCHAR(7), riqi, 120) ,
'本月合计' ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END), 0) 入库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 出库总量 ,
ISNULL(SUM(CASE biaozhi
WHEN '入库' THEN shuliang
END) - SUM(CASE biaozhi
WHEN '出库' THEN shuliang
END), 0) 库存总量
FROM churuku
GROUP BY CONVERT(VARCHAR(7), riqi, 120)
) aa
ORDER BY 月份 ,
CHARINDEX('甲', 类别) DESC ,
CHARINDEX('乙', 类别) DESC ,
CHARINDEX('丙', 类别) DESC ,
CHARINDEX('丁', 类别) DESC ,
CHARINDEX('本', 类别) DESC
/* 现在的结果你的前面我是可以对上的,后面的关系不清楚
月份 类别 入库总量 出库总量 库存总量
------- --------------- ----------- ----------- -----------
2011-01 甲产品 130 2 128
2011-01 乙产品 8 4 4
2011-01 本月合计 138 6 132
2011-02 甲产品 20 0 0
2011-02 乙产品 0 1 0
2011-02 丙产品 10 0 0
2011-02 丁产品 2 0 0
2011-02 本月合计 32 1 31
2011-03 乙产品 10 0 0
2011-03 丙产品 0 2 0
2011-03 本月合计 10 2 8
*/
;with maco as(
select
月份=convert(varchar(7),riqi,120),
sum(case biaozhi when '入库' then shuliang end) 当月入库总量,
sum(case biaozhi when '出库' then shuliang end) 当月出库总量,
sum(case biaozhi when '入库' then shuliang end)-
sum(case biaozhi when '出库' then shuliang end) 当月库存新增
from churuku
group by convert(varchar(7),riqi,120))
select *,(select sum(当月入库总量) from maco where 月份<=t.月份) as 之前累积的入库总量,
(select sum(当月出库总量) from maco where 月份<=t.月份) as 之前累积的出库总量,
(select sum(当月库存新增) from maco where 月份<=t.月份) as 现在的库存
from maco t
/*
月份 当月入库总量 当月出库总量 当月库存新增 之前累积的入库总量 之前累积的出库总量 现在的库存
------- ----------- ----------- ----------- ----------- ----------- -----------
2011-01 138 6 132 138 6 132
2011-02 32 1 31 170 7 163
2011-03 10 2 8 180 9 171
*/