表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

解决方案 »

  1.   

    其实大部分我都写出来了SQL语句,指示我的笨办法,我不想启用太多的SQL语句,我现在的写法是这样的
    我已经通过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语句可以直接计算出来的,指示我不太知道怎么写
      

  2.   

    create table t1(ID int,商品名称 varchar(10),商品编号 varchar(10),商品类型 varchar(10))
    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
      

  3.   

    高手就是高手,绝对学习。看来SQL语句需要强力加强,兄弟结账了