两个表
A表:
名称  进货时间     价格
糖    2008-10-1  12
糖    2008-10-10  12.5
油    2008-11-1  8B表:
名称  销售时间     价格
油    2008-11-11  8.5
糖    2008-11-10  15
糖    2008-11-15  15.5我想查询得到某个货物在某段时间内的进货金额和销售价格金额分别是多少?比如糖在10月份进货的金额是24.5,销售金额是0,在11月份进货的金额是0,销售的金额是30.5。

解决方案 »

  1.   


    select 0 as 销售金额,sum(价格) as 进货金额 
    FROM A WHERE Month(进货时间)=10 AND 名称=糖 GROUP BY 名称
    UNION ALL
    select sum(价格) as 价格,0 as 进货金额 
    FROM A WHERE Month(进销售时间)=10 AND 名称=糖 GROUP BY 名称
      

  2.   

    select isnull(m.名称,n.名称) 名称 , isnull(m.月份,n.月份) 月份 , isnull(m.pr , 0) 进货金额 , isnull(n.pr , 0) 销售金额 from
    (select 名称 , convert(varchar(7),进货时间,120) 月份 , sum(价格) pr from a group by 名称 , convert(varchar(7),进货时间,120)) m
    full join
    (select 名称 , convert(varchar(7),销售时间,120) 月份 , sum(价格) pr from b group by 名称 , convert(varchar(7),销售时间,120)) n
    on m.名称 = n.名称 and m.月份 = n.月份
      

  3.   

    create table A(名称 varchar(10) , 进货时间 datetime,   价格 decimal(18,1))
    insert into A values('糖',    '2008-10-1' , 12 )
    insert into A values('糖',    '2008-10-10', 12.5) 
    insert into A values('油',    '2008-11-1' , 8) 
    create table B(名称 varchar(10) , 销售时间 datetime,   价格 decimal(18,1))
    insert into B values('油',    '2008-11-11' , 8.5 )
    insert into B values('糖',    '2008-11-10' , 15 )
    insert into B values('糖',    '2008-11-15' , 15.5)
    goselect isnull(m.名称,n.名称) 名称 , isnull(m.月份,n.月份) 月份 , isnull(m.pr , 0) 进货金额 , isnull(n.pr , 0) 销售金额 from
    (select 名称 , convert(varchar(7),进货时间,120) 月份 , sum(价格) pr from a group by 名称 , convert(varchar(7),进货时间,120)) m
    full join
    (select 名称 , convert(varchar(7),销售时间,120) 月份 , sum(价格) pr from b group by 名称 , convert(varchar(7),销售时间,120)) n
    on m.名称 = n.名称 and m.月份 = n.月份drop table A, B 
    /*
    名称         月份      进货金额                                     销售金额                                     
    ---------- ------- ---------------------------------------- ---------------------------------------- 
    糖          2008-10 24.5                                     .0
    糖          2008-11 .0                                       30.5
    油          2008-11 8.0                                      8.5(所影响的行数为 3 行)*/
      

  4.   

    一定要用联合查询啊?能不能一条sql语句搞定?如果这两个表的数据实际上存放在一个表里面呢?
      

  5.   

    谢谢dawugui 2、3喽的答复,测试后给予加分,谢谢。
      

  6.   

    谢谢dawugui 2、3喽的答复,测试后给予加分,谢谢。
      

  7.   

    两个表用联合查询.如果这两个表的数据实际上存放在一个表里面,可直接
    select 名称 , convert(varchar(7),时间,120) 月份 , sum(进货价格) 进货价格 , sum(销售价格) 销售价格 from a group by 名称 , convert(varchar(7),时间,120)
      

  8.   

    --如果在一个表,需要增加一个字段来区分是进货还是销售.create table A(名称 varchar(10) , 时间 datetime,   价格 decimal(18,1) , type varchar(10))
    insert into A values('糖',    '2008-10-1' , 12  , '进货')
    insert into A values('糖',    '2008-10-10', 12.5, '进货') 
    insert into A values('油',    '2008-11-1' , 8   , '进货') 
    insert into A values('油',    '2008-11-11' , 8.5 ,'销售'  )
    insert into A values('糖',    '2008-11-10' , 15  ,'销售'  )
    insert into A values('糖',    '2008-11-15' , 15.5,'销售'  )
    goselect 名称 , convert(varchar(7),时间,120) 月份 , 
      sum(case type when '进货' then 价格 else 0 end ) 进货价格,
      sum(case type when '销售' then 价格 else 0 end ) 销售价格
    from a group by 名称 , convert(varchar(7),时间,120)drop table A/*
    名称         月份      进货价格                                     销售价格                                     
    ---------- ------- ---------------------------------------- ---------------------------------------- 
    糖          2008-10 24.5                                     .0
    糖          2008-11 .0                                       30.5
    油          2008-11 8.0                                      8.5(所影响的行数为 3 行)
    */
      

  9.   

    同意"dawugui",代码我测试过,完全没有问题
      

  10.   

    use a
    go
    create table A(名称 varchar(10) , 进货时间 datetime,   价格 decimal(18,1))
    insert into A values('糖',    '2008-10-1' , 12 )
    insert into A values('糖',    '2008-10-10', 12.5) 
    insert into A values('油',    '2008-11-1' , 8) 
    create table B(名称 varchar(10) , 销售时间 datetime,   价格 decimal(18,1))
    insert into B values('油',    '2008-11-11' , 8.5 )
    insert into B values('糖',    '2008-11-10' , 15 )
    insert into B values('糖',    '2008-11-15' , 15.5)
    go
    select isnull(m.名称,n.名称) 名称 , isnull(m.月份,n.月份) 月份 , isnull(m.pr , 0) 进货金额 , isnull(n.pr , 0) 销售金额 from
    (select 名称 , datepart(mm,进货时间) 月份 , sum(价格) pr from a group by 名称 , datepart(mm,进货时间)) m
    full join
    (select 名称 , datepart(mm,销售时间) 月份 , sum(价格) pr from b group by 名称 , datepart(mm,销售时间)) n
    on  m.名称 = n.名称 and m.月份 = n.月份
      

  11.   

    感谢dawugui 的isnull函数和sum(case type when '' then XX else 0 end )这样的写法,结贴。谢谢。