有一数据表  PPT
格式如下
名称   日期         数量
A        2009-5-11      100
A     2009-5-11   -15 
A        2009-5-12      -20
A        2009-5-13      50
A        2009-5-15      -5
B        2009-5-10      200
B        2009-5-13      -100
B        2009-5-18      20查询后形成以下格式表格比如查询A
  日期       入    出    余
 20095-11     100   15    85
 2009-5-12         20    65
 2009-5-13    50         115
 2009-5-15         5     110
这样一种表格形式,请教用查询语句如何写??????    
       

解决方案 »

  1.   

    select main_PPT.[日期], isnull(in_PPT.[数量], 0) as [入], isnull(out_PPT.[数量], 0) as [出], result_PPT.[数量] as [余]
    from 
      (select distinct [日期] from PPT) as main_PPT
    left join
      (select [日期], sum([数量]) as [数量] from PPT where [数量] > 0 group by [日期]) as in_PPT
        on in_PPT.[日期] = main_PPT.[日期]
    left join
      (select [日期], sum([数量]) as [数量] from PPT where [数量] < 0 group by [日期]) as out_PPT
        on out_PPT.[日期] = main_PPT.[日期]
    left join
      (select [日期], sum([数量]) as [数量] from PPT group by [日期]) as result_PPT
        on result_PPT.[日期] = main_PPT.[日期]
      

  2.   


    select 日期 ,sum(isnull(入,0)) as 入,sum(isnull(出,0)) as 出,sum(isnull(入,0)+isnull(出,0)) as 余
     from 
    (SELECT
    日期,
    case  when (数量 > 0) then 数量 end AS 入,
    case  when (数量 < 0) then 数量 end AS 出
    FROM tb where 名称 = 'A') A
    group by 日期
    余额用游标再处理一下就行
      

  3.   

    select [日期], sum(case when [数量] >0 then [数量] else 0 end) as [入], sum(case when [数量] <0 then [数量]*(-1) else 0 end) as [出], sum([数量]) as [余] from PPT group by [日期]
      

  4.   

    select 名称,日期 ,sum(入) as 入,sum(出) as 出,sum(入)+sum(出) as 余  from 
    (SELECT 名称,日期,
    case  when (数量 > 0) then 数量 end AS 入,
    case  when (数量 < 0) then 数量 end AS 出
    FROM tb ) A group by 名称,日期
      

  5.   

    select ta.名称,ta.日期 ,ta.入 ,ta.出 ,sum(tb.入)-sum(tb.出) as 余  from 
       (SELECT 名称,日期, sum(case  when (数量 > 0) then 数量 end) AS 入, 
           sum(case  when (数量 < 0) then 数量 end) AS 出 FROM group by 名称,日期) tA,
       (SELECT 名称,日期, sum(case  when (数量 > 0) then 数量 end) AS 入, 
           sum(case  when (数量 < 0) then 数量 end) AS 出 FROM group by 名称,日期) tb
       where ta.名称=tb.名称 and ta.日期<=tb.日期
        group by ta.名称,ta.日期 ,ta.入 ,ta.出