SQL语法错误分组依据
我有一个sql语法,它给了我一个错误: Msg 8120,16级,状态1,第1行“车辆应力传导”列 在选择列表中无效,因为它不包含在 聚合函数或GROUPBY子句 以下是SQL语法:SQL语法错误分组依据,sql,sql-server-2008,Sql,Sql Server 2008,我有一个sql语法,它给了我一个错误: Msg 8120,16级,状态1,第1行“车辆应力传导”列 在选择列表中无效,因为它不包含在 聚合函数或GROUPBY子句 以下是SQL语法: SELECT A.cplateno,A.cconduction,A.cname,A.cbatterymodel ,A.dbattery,A.DlastChange,A.nlastoilkm,A.naveragekmday ,A.dkmreading,A.dfranacq,A.dfranexp,A.nlimit,A.
SELECT A.cplateno,A.cconduction,A.cname,A.cbatterymodel
,A.dbattery,A.DlastChange,A.nlastoilkm,A.naveragekmday
,A.dkmreading,A.dfranacq,A.dfranexp,A.nlimit,A.dreading
,CONVERT(varchar(2),month(MAX(B.dinsexp)))+'/'+CONVERT(varchar(2),day(MAX(B.dinsexp)))+'/'+CONVERT(varchar(4),year(MAX(B.dinsexp))) as dinsexp
,C.corno,CONVERT(varchar(2),month(MAX(C.dregexp)))+'/'+CONVERT(varchar(2),day(MAX(C.dregexp)))+'/'+ CONVERT(varchar(4),year(MAX(C.dregexp))) as dregexp
FROM VEHICLEMASTR A
LEFT JOIN VEHICLEINSURANCE B
ON A.cplateno = B.cplateno
LEFT JOIN VREGISTRATION C
ON A.cplateno = C.cplateno
GROUP BY A.cplateno
有人能说出哪里出了问题吗?除了作为聚合函数的列外,“group by”子句必须命名所选的每一列
仅供参考,“聚合”函数是一个为多行返回单个值的函数,如sum()、count()等。cconduction需要位于group by子句中 使用
Group By
子句时,列必须具有聚合函数(即COUNT)或在Group By中定义
具有多个分组的group by语句示例:
SELECT column1_name, column2_name, aggregate_function(column_name3)
FROM table_name
WHERE column_name1 operator value
GROUP BY column_name1, column_name2;
您必须包括select中提到的所有字段,但具有聚合功能的列除外,因此在您的情况下,它将是:
GROUP BY
a.cplateno, a.cconduction,a.cname,a.cbatterymodel,a.dbattery,
a.DlastChange,a.nlastoilkm,a.naveragekmday,
a.dkmreading,a.dfranacq,a.dfranexp,a.nlimit,a.dreading
而不是
GROUP BY a.cplateno
编辑:
如果只需要a.cplateno
,则不包括除aggregate函数
和a.cplateno
之外的其他字段,如:
SELECT A.cplateno
,CONVERT(varchar(2),month(MAX(B.dinsexp)))+'/'+CONVERT(varchar(2),day(MAX(B.dinsexp)))+'/'+CONVERT(varchar(4),year(MAX(B.dinsexp))) as dinsexp
,CONVERT(varchar(2),month(MAX(C.dregexp)))+'/'+CONVERT(varchar(2),day(MAX(C.dregexp)))+'/'+ CONVERT(varchar(4),year(MAX(C.dregexp))) as dregexp
FROM VEHICLEMASTR A
LEFT JOIN VEHICLEINSURANCE B
ON A.cplateno = B.cplateno
LEFT JOIN VREGISTRATION C
ON A.cplateno = C.cplateno
GROUP BY A.cplateno
在执行分组函数时,不能将所有列都放在select语句中。您必须将它们放在group by子句中,或者使用某种类型的函数(如count)使它们能够在那里。将VehicleMaster.cconduction字段也放在group by中。因为如果您使用的是任何聚合函数,那么所有选定的列列表都必须具有in Group by子句。。。我应该把所有列都放在GROUPBY语句中吗?对吗?对。基本上复制粘贴您的select子句到GROUPBY子句中,并删除加重的values@JesunBicar是的,对于这样一个looonnnggg查询,我没有看到;-)