2 qq 36196843 qq_36196843 于 2017.08.31 09:13 提问

报错缺失表达式,代码我复制到下面了,大佬帮我看看,谢谢了,自己找了很久没发现错误。。。

SELECT DISTINCT B.INSUREDNAME AS INSUREDNAME,A.ACCIDENTNO,
MIN(D.CLAIMCOMCODE) AS CLAIMCOMCODE,
DISTINCT C.MODELNAME AS MODELNAME,
MIN(A.DAMAGESTARTDATE) AS DAMAGESTARTDATE,
MIN(A.DAMAGEADDRESS) AS DAMAGEADDRESS,
DISTINCT C.LICENSENO AS LICENSENO
FROM MID_CAR_LREGIST A,
WEB_LIST_CMAIN B,
ODS_CITEMCAR C,
ODS_CAR_LSURVEY D
WHERE A.ACCIDENTNO ='62016420000041083'
AND A.POLICYNO = B.POLICYNO
AND A.POLICYNO = C.POLICYNO
AND A.ACCIDENTNO = D.ACCIDENTNO
AND A.CANCELDATE IS NULL
GROUP BY A.ACCIDENTNO, A.CLAIMCOMCODE;

2个回答

linqin107412
linqin107412   2017.08.31 09:50
已采纳

首先说Group By,你用了min()函数,上面没有使用聚合函数的字段都需要加在Group By后面进行分组。而你只加了两个,其中A.CLAIMCOMCODE
写法还是错的,再说你SQL语句,你这样查如果B表,C表中POLICYNO为外键且有多个,你查出来了的条数就不是唯一的了

qq_36196843
qq_36196843 谢谢,我解决了问题了,是group by的错误,感激不尽
3 个月之前 回复
qq_36196843
qq_36196843 很感谢,我按照你的思路再修改一下,谢谢了
3 个月之前 回复
qq_33727653
qq_33727653   2017.08.31 09:43

楼主是以A.ACCIDENTNO, A.CLAIMCOMCOD分组了,我记得oracle是不允许你查出的字段(你select 后面的字段)有 A.ACCIDENTNO, A.CLAIMCOMCODE这两个字段之外的字段的,当然是允许有函数如MIN、MAX、AVG等等存在的!还有就是楼主的DISTINCT用的好像不对啊!!!

qq_36196843
qq_36196843 谢谢你提供的参考信息,是由于没在group by中的select中的列我没使用聚集函数,违反了语法规则了~
3 个月之前 回复
qq_36196843
qq_36196843 原本每一个distinct那里是F_LINK(DISTINCT .........) AS ..........但是找不到F_LINK这个自定义函数,去掉了F_LINK后就报错说表达式无效了
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片