没分了,不过还是请高手看一下这个问题,比较想不通~~~
ALTER            proc   zjreport_case 
          ( 
             @cname   varchar(1000)=null, 
             @sdate   datetime=null, 
             @edate   datetime=null 
             ) 
 as    
 begin 
 select   aa.公司名称zy   as   公司名称,sum(审批金额)   as   审批金额,sum(批复金额)   as   批复金额   from    
 ( 
 select   *   from    
 ( 
    select   公司名称,公司id,审批金额,批复金额,审批意见,请求时间,gsid      from   a 
    union   all 
    select   公司名称,公司id,审批金额,批复金额,审批意见,请求时间,gsid      from   b 
 )   tt1 
    where      审批意见= '同意 '    
 /*   ------------------------   */ 
 and      @cname   is   null   or   @cname   =    '0 '      or   gsid      in   ( 
 select   gsid   from   duizhaobiao   where   zyid   in   (select   zyid   from   duizhaobiao   where      charindex( ', '+rtrim(gsid)+ ', ', ', '+@cname+ ', ')> 0)    
 ) 
 /*   ------------------------   */ 
 and   请求时间> (case   when   @sdate   is   null   then   请求时间-1   else   @sdate   end) 
 and   请求时间 <(case   when   @edate   is   null   then   请求时间+1   else   @edate   end) 
 )tt   ,duizhaobiao   aa   where   tt.公司id   =   aa.gsid   group   by   aa.公司名称zy 
 end 
 GO   
 -------------------------- 
 这是我的存储过程~~~~   
 在查询分析器中运行时   
 1.当输入条件cname   is   null时,产生的数据如下: 
 a汽销      	98159560.9500	85159560.9500 
 b分公司	21135910.0000	21135910.0000 
 有一个返回的警告信息: 
 警告:   聚合或其它   SET   操作消除了空值。   
 2.当输入条件cname   =    '0 '   时,产生的数据如下: 
 a汽销	                        103426960.9500      	90426960.9500 
 b分公司	22624386.0000	22624386.0000   
 有一个返回的警告信息: 
 警告:   聚合或其它   SET   操作消除了空值。   
 3.当输入条件cname   为具体值时,产生的数据如下: 
 a汽销	               103426960.9500	90426960.9500   
 没有返回警告信息~~~~   
 输入条件is   null   或是   cname   =    '0 '   时实际上取出的数据是全部的,搞不懂为什么条件不同得出的数据会不相等呢,理论上同一家公司取出的汇总数据是应该相等的~~   
 问题全部出在这一部份上了:   
 and      @cname   is   null   or   @cname   =    '0 '      or   gsid      in   ( 
 select   gsid   from   duizhaobiao   where   zyid   in   (select   zyid   from   duizhaobiao   where      charindex( ', '+rtrim(gsid)+ ', ', ', '+@cname+ ', ')> 0)    
 )     
 但搞不懂为什么会有这种情况产生,高手能不能帮忙分析一下啊,有什么解决办法吗? 
 郁闷~~~     
------解决方案--------------------呵呵, 
 将类似 sum(审批金额) as 审批金额 的语句改为: 
 sum(isnull(审批金额,0)) as 审批金额 
 就不会出现这个警告了.试试吧. 
------解决方案--------------------呵呵,and 与 or 连用时,要注意加括号呀. 
 xxx and xxx or xxx or xxx  
 改成: 
 xxx and (xxx or xxx or xxx ) 
 不加括号的话,and 无效.