create procedure p_1(
@start varchar(20)--开始时间,
@end varchar(20)--结束时间,
@flag int --0:表示查询申请时间,1:表示查核销时间)
as
if @flag=0
select 城市,[管理费]=sum(case 费用名称 when '管理费' then 申请金额 else 0 end),
[特价费]==sum(case 费用名称 when '特价费' then 申请金额 else 0 end)
from tbname where 申请时间 between @start and @end
else
select 城市,[管理费]=sum(case 费用名称 when '管理费' then 核销金额 else 0 end),
[特价费]==sum(case 费用名称 when '特价费' then 核销金额 else 0 end)
from tbname where 核销时间 between @start and @end
go

解决方案 »

  1.   

    1、我的想法是根据申请时间和报核时间的大小进行判断,然后新建一个临时表,临时表比录入表多一个字段,该字段用来存储(申请金额和核销金额之间的值),------------------>
    create procedure p_1(
    @start varchar(20)--开始时间,
    @end varchar(20)--结束时间)
    asselect 城市,[管理费]=sum(case 费用名称 when '管理费' then 申请金额-核销金额 else 0 end),
    [特价费]==sum(case 费用名称 when '特价费' then 申请金额-核销金额 else 0 end)
    from tbname 
    where (申请时间 between @start and @end) or (核销时间 between @start and @end)go
      

  2.   

    你这样做没有处理好申请时间和核销时间之间的关系,如果开始时间<申请时间<核销时间<结束时间
    则金额是(申请金额-核销金额)
      

  3.   

    create procedure p_1(
    @start varchar(20)--开始时间,
    @end varchar(20)--结束时间)
    asselect 城市,[管理费]=sum(case 费用名称 when '管理费' then 申请金额-核销金额 else 0 end),
    [特价费]==sum(case 费用名称 when '特价费' then 申请金额-核销金额 else 0 end)
    from tbname 
    where (申请时间 between @start and @end) or (核销时间 between @start and @end)go
    你这样做只是满足了一个条件开始时间<申请时间<核销时间<结束时间
    其它条件还没做出来,你查询时间2005-04-2005-05,出来的结果就跟我的要求不一样了
      

  4.   

    有的时候,那个临时表的字段的值是=申请金额-核销金额
    有的时候,那个临时表的字段的值是=申请金额(如果报核时间为NULL或报核时间>结束时间且申请时间>开始时间)
    有的时候,那个临时表的字段的值是=(-核销金额),如果查询开始时间>申请时间且报核时间<结束时间