DatabaseError: Execution failed on sql 'select * from(select plucode as "商品编码",pluname as "商品名称",sum(HXTotal) as"销售金额",round(sum(HXTotal)/NULLIF(select sum(hxtotal) FROM tSalPluDetail202305 A WHERE RPTDATE='2023-05-29' AND exists(select 1 from torgexinfo where udp1='超市' and udp3<>'3-批发中心' and orgcode=a.orgcode) and substr(clscode,1,4)='0801' )*100,2) as "销售占比",sum(HMTotal) as "毛利",round(sum(HMTotal)/sum(HXTotal)*100,2) as "毛利率"FROM tSalPluDetail202305 A WHERE RPTDATE='2023-05-29' AND exists(select 1 from torgexinfo where udp1='超市' and udp3<>'3-批发中心' and orgcode=a.orgcode)and substr(clscode,1,4)='0801' group by plucode,pluname ORDER BY sum(HXTotal) DESC) where ROWNUM <= 20': ORA-00936: 缺失表达式
时间: 2024-02-20 15:00:54 浏览: 114
这个错误是由于SQL语句中缺少一个表达式导致的,具体来说,是在以下这一部分中:
```
round(sum(HXTotal)/NULLIF(select sum(hxtotal) FROM tSalPluDetail202305 A WHERE RPTDATE='2023-05-29' AND exists(select 1 from torgexinfo where udp1='超市' and udp3<>'3-批发中心' and orgcode=a.orgcode) and substr(clscode,1,4)='0801' )*100,2) as "销售占比"
```
我们使用了`NULLIF`函数来避免除数为0的情况,但是这个函数的第一个参数缺少一个表达式。
要解决这个问题,我们需要确定`NULLIF`函数的第一个参数。根据SQL语句的结构,第一个参数应该是`sum(HXTotal)`除以某个值,这个值的计算方式应该和分母的计算方式相同。所以我们可以将分母的计算方式提取出来,作为一个子查询:
```
(select sum(hxtotal) FROM tSalPluDetail202305 A WHERE RPTDATE='2023-05-29' AND exists(select 1 from torgexinfo where udp1='超市' and udp3<>'3-批发中心' and orgcode=a.orgcode) and substr(clscode,1,4)='0801' )
```
然后,在`NULLIF`函数的第一个参数中,我们将`sum(HXTotal)`除以这个子查询的结果:
```
sum(HXTotal)/NULLIF((select sum(hxtotal) FROM tSalPluDetail202305 A WHERE RPTDATE='2023-05-29' AND exists(select 1 from torgexinfo where udp1='超市' and udp3<>'3-批发中心' and orgcode=a.orgcode) and substr(clscode,1,4)='0801' ),0)*100
```
这样就能够正确地计算销售占比了。
阅读全文