表A
ID 商品名称 商品编号 商品类型
1 手镯 20111211 玉器
2 金佛 20111212 金器
3 玉佛 20111213 玉器
4 金钗 20111213 金器表B
ID 库存数 日期 P_ID
1 5 2011-11-1 1
2 6 2011-12-1 2
3 5 2011-11-2 3
4 6 2011-12-2 4
5 4 2011-11-1 1
6 5 2011-12-2 1表C 销售表
ID 商品名称 销售数量 商品类别 F_ID 销售时间
1 手镯 1 玉器 1 2011-12-1
2 手镯 1 玉器 5 2011-12-12
3 金佛 1 金器 2 2011-12-2
结果 查询 2011年12月份库存数和销售数据商品名称 商品编号 商品类别 库存总数 12月份之前的库存数 12月份进货数 12月份销售数
手镯 20111211 玉器 14 9 5 2
金佛 20111212 金器 6 6 0 0
玉佛 20111213 玉器 5 5 0 0
金钗 20111213 金器 6 6 0 0
其中表B列P_ID是表A列ID的父键
表C F_ID 是表B的父ID
ID 商品名称 商品编号 商品类型
1 手镯 20111211 玉器
2 金佛 20111212 金器
3 玉佛 20111213 玉器
4 金钗 20111213 金器表B
ID 库存数 日期 P_ID
1 5 2011-11-1 1
2 6 2011-12-1 2
3 5 2011-11-2 3
4 6 2011-12-2 4
5 4 2011-11-1 1
6 5 2011-12-2 1表C 销售表
ID 商品名称 销售数量 商品类别 F_ID 销售时间
1 手镯 1 玉器 1 2011-12-1
2 手镯 1 玉器 5 2011-12-12
3 金佛 1 金器 2 2011-12-2
结果 查询 2011年12月份库存数和销售数据商品名称 商品编号 商品类别 库存总数 12月份之前的库存数 12月份进货数 12月份销售数
手镯 20111211 玉器 14 9 5 2
金佛 20111212 金器 6 6 0 0
玉佛 20111213 玉器 5 5 0 0
金钗 20111213 金器 6 6 0 0
其中表B列P_ID是表A列ID的父键
表C F_ID 是表B的父ID
我已经通过SQL语句时限了,上月库存数,本月库存数,库存总数,具体写法如下SELECT Stock.spbh, Stock.spmc, Stock.jhjg, Stock.spdw, SUM(PutStock.PutSubmer)
AS TPutSubmer, SUM(CASE WHEN 0 = 0 AND year(PutStock.adddate) >= 2011 AND
month(PutStock.adddate) >= 11 THEN PutStock.PutSubmer ELSE 0 END) AS xyku,
SUM(CASE WHEN 0 = 0 AND year(PutStock.adddate) <= 2011 AND
month(PutStock.adddate) <= 10 THEN PutStock.PutSubmer ELSE 0 END) AS sykc,
SUM(CASE WHEN 0 = 0 AND year(PutStock.adddate) = 2011 AND
month(PutStock.adddate) = 11 THEN PutStock.PutSubmer ELSE 0 END) AS bykc
FROM Stock, PutStock
WHERE Stock.ID = PutStock.F_ID
GROUP BY Stock.spbh, Stock.spmc, Stock.jhjg, Stock.spdw
ORDER BY PutStock.TPutSubmer DESC但是如果我按照这样的写法的话,我也能算出销售量,指示通过循环得到产品编号,在重新通过SQL语句计算出销售数据。
我觉着通过一条SQL语句可以直接计算出来的,指示我不太知道怎么写
insert into t1 select 1,'手镯','20111211','玉器'
insert into t1 select 2,'金佛','20111212','金器'
insert into t1 select 3,'玉佛','20111213','玉器'
insert into t1 select 4,'金钗','20111213','金器'
create table t2(ID int,库存数 int,日期 datetime,P_ID int)
insert into t2 select 1,5,'2011-11-1',1
insert into t2 select 2,6,'2011-12-1',2
insert into t2 select 3,5,'2011-11-2',3
insert into t2 select 4,6,'2011-12-2',4
insert into t2 select 5,4,'2011-11-1',1
insert into t2 select 6,5,'2011-12-2',1
create table t3(ID int,商品名称 varchar(10),销售数量 int,商品类别 varchar(10),F_ID int,销售时间 datetime)
insert into t3 select 1,'手镯',1,'玉器',1,'2011-12-1'
insert into t3 select 2,'手镯',1,'玉器',5,'2011-12-12'
insert into t3 select 3,'金佛',1,'金器',2,'2011-12-2'
go
select a.id,a.商品名称,a.商品编号,a.商品类型,sum(b.库存数)库存总数,
sum(case when 日期<'2011-12-01' then 库存数 else 0 end)[12月份以前的库存数],
sum(case when convert(varchar(7),日期,120)='2011-12' then 库存数 else 0 end)[12月份进货数],
isnull((select sum(d1.销售数量) from t3 d1 inner join t2 d2 on d1.F_id=d2.id where convert(varchar(7),d1.销售时间,120)='2011-12' and d2.p_id=a.id),0)[12月份销售数]
from t1 a inner join t2 b on a.ID=b.P_ID
group by a.id,a.商品名称,a.商品编号,a.商品类型
/*
id 商品名称 商品编号 商品类型 库存总数 12月份以前的库存数 12月份进货数 12月份销售数
----------- ---------- ---------- ---------- ----------- ----------- ----------- -----------
1 手镯 20111211 玉器 14 9 5 2
2 金佛 20111212 金器 6 0 6 1
3 玉佛 20111213 玉器 5 5 0 0
4 金钗 20111213 金器 6 0 6 0(4 行受影响)*/
go
drop table t1,t2,t3