select * from sj11 Where 1=1  and Zy_BlZt='办理' and Zf_PostCode is null and Yjz_Code is not null And 
(SELECT SUM (Yp1_Money+Xm1_Money+Wc1_Money) AS Fy_ZMoney 
FROM Sj11 t1 WHERE Zy_BlZt='办理' and Zf_PostCode is null   
group by  t1.Ry_Code) between  1000 and 2000单行子查询返回多行。。报错啊 怎么办  谢谢啦语句 sql oracle

解决方案 »

  1.   

    SELECT *
      FROM SJ11
     WHERE 1 = 1
       AND ZY_BLZT = '办理'
       AND ZF_POSTCODE IS NULL
       AND YJZ_CODE IS NOT NULL
       AND (SELECT SUM(YP1_MONEY + XM1_MONEY + WC1_MONEY) AS FY_ZMONEY
              FROM SJ11 T1
             WHERE ZY_BLZT = '办理'
               AND ZF_POSTCODE IS NULL
             GROUP BY T1.RY_CODE) BETWEEN 1000 AND 2000
    你的代码肯定有问题啊。
    SELECT SUM(YP1_MONEY + XM1_MONEY + WC1_MONEY) AS FY_ZMONEY
              FROM SJ11 T1
             WHERE ZY_BLZT = '办理'
               AND ZF_POSTCODE IS NULL
             GROUP BY T1.RY_CODE
    这个里面的是根据RY_CODE来分组的,但是外面那张表里面RY_CODE对应的肯定是多条数据啊。关联肯定有问题的啊。
      

  2.   

    按题意应该是这样...select * 
    from sj11 t
    Where 1=1  and Zy_BlZt='办理' and Zf_PostCode is null and Yjz_Code is not null And 
    (SELECT SUM (Yp1_Money+Xm1_Money+Wc1_Money) AS Fy_ZMoney 
     FROM Sj11 t1 
     HERE Zy_BlZt='办理' and Zf_PostCode is null and  t. Ry_Code = t1.Ry_Code
    ) between  1000 and 2000
      

  3.   

    你把下面部分语句单独执行一下会发现结果是好几条数据,所以会报“单行子查询返回多行”
    SELECT SUM(YP1_MONEY + XM1_MONEY + WC1_MONEY) AS FY_ZMONEY
              FROM SJ11 T1
             WHERE ZY_BLZT = '办理'
               AND ZF_POSTCODE IS NULL
             GROUP BY T1.RY_CODE
    “AND XXX between 1000 and 2000”这个XXXX只能是一个数据,结果你的子查询返回好几条数据,Oracle无法决定拿哪一条数据来判断between 1000 and 2000,逻辑上就是不通的5L的sql是对的,或者可以这样写:
    SELECT *
      FROM SJ11
     WHERE ZY_BLZT = '办理'
       AND ZF_POSTCODE IS NULL
       AND YJZ_CODE IS NOT NULL
       AND RY_CODE IN (SELECT T1.RY_CODE          
              FROM SJ11 T1
             WHERE ZY_BLZT = '办理'
               AND ZF_POSTCODE IS NULL
             GROUP BY T1.RY_CODE
            HAVING SUM(T1.YP1_MONEY + T1.XM1_MONEY + T1.WC1_MONEY) BETWEEN 1000 AND 2000)