Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL语法错误分组依据_Sql_Sql Server 2008 - Fatal编程技术网

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.

我有一个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.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查询,我没有看到;-)