首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL除零异常和返回多值有关问题

2013-06-25 
SQL除零错误和返回多值问题select sum1/sum2 from (select UsrA01.E0122 as id,sum(C411F+C411G+C411E+C41

SQL除零错误和返回多值问题

select sum1/sum2 from 
(select UsrA01.E0122 as id,sum(C411F+C411G+C411E+C411P+C411R) sum1  from UsrA41  
        right join UsrA01 on UsrA41.A0100=UsrA01.A0100  
        where YEAR(A41Z0)='2013' and month(A41Z0) = '01'  and E0122 like '01%'   group by UsrA01.E0122) tbl1
left join 
(select UsrA01.E0122 as id,sum(C411F+C411G+C411E+C411P+C411R) sum2  from UsrA41  
        right join UsrA01 on UsrA41.A0100=UsrA01.A0100  
        where YEAR(A41Z0)='2013' and month(A41Z0) = '02'  and E0122 like '01%'   group by UsrA01.E012) tbl2

on tbl1.id=tbl2.id



这样的话会遇到除零错误,怎么样修改那?
 case when 
 
 then 0
        else
 加上这个以后


  select  
     case when
(select sum(C411F+C411G+C411E+C411P+C411R) sum2  from UsrA41  
        right join UsrA01 on UsrA41.A0100=UsrA01.A0100  
        where YEAR(A41Z0)='2013' and month(A41Z0) = '02'  and E0122 like '01%'   group by UsrA01.E0122) =0
         then 0
         else(
        select sum1/sum2 from 
(select UsrA01.E0122 as id,sum(C411F+C411G+C411E+C411P+C411R) sum1  from UsrA41  
        right join UsrA01 on UsrA41.A0100=UsrA01.A0100  
        where YEAR(A41Z0)='2013' and month(A41Z0) = '01'  and E0122 like '01%'   group by UsrA01.E0122) tbl1
left join 
(select UsrA01.E0122 as id,sum(C411F+C411G+C411E+C411P+C411R) sum2  from UsrA41  
        right join UsrA01 on UsrA41.A0100=UsrA01.A0100  
        where YEAR(A41Z0)='2013' and month(A41Z0) = '02'  and E0122 like '01%'   group by UsrA01.E0122) tbl2

on tbl1.id=tbl2.id) end from UsrA01



会出现 
 
消息 512,级别 16,状态 1,第 1 行
 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
 

我需要他返回多个值现在应该在写,求解  SQL select Oracle?11g ActionScript C
[解决办法]
SELECT  sum1 / CASE WHEN sum2 = 0 THEN 1 ELSE sum2 END  --这个地方改一下
FROM    ( SELECT    UsrA01.E0122 AS id ,


                    SUM(C411F + C411G + C411E + C411P + C411R) sum1
          FROM      UsrA41
                    RIGHT JOIN UsrA01 ON UsrA41.A0100 = UsrA01.A0100
          WHERE     YEAR(A41Z0) = '2013'
                    AND MONTH(A41Z0) = '01'
                    AND E0122 LIKE '01%'
          GROUP BY  UsrA01.E0122
        ) tbl1
        LEFT JOIN ( SELECT  UsrA01.E0122 AS id ,
                            SUM(C411F + C411G + C411E + C411P + C411R) sum2
                    FROM    UsrA41
                            RIGHT JOIN UsrA01 ON UsrA41.A0100 = UsrA01.A0100
                    WHERE   YEAR(A41Z0) = '2013'
                            AND MONTH(A41Z0) = '02'
                            AND E0122 LIKE '01%'
                    GROUP BY UsrA01.E012
                  ) tbl2 ON tbl1.id = tbl2.id

热点排行