2013-06-29 81 views
1

我有一个SQL语法,它给我的错误:SQL语法错误集团通过

Msg 8120, Level 16, State 1, Line 1 Column 'VEHICLEMASTR.cconduction' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

下面是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 

谁能告诉了什么问题?

+0

你的时候你不能把所有列在select语句正在做分组功能。你必须把它们放在group by子句中,或者有一些类型的函数(比如count)来使它们在那里。 – tsells

+0

把那个** VEHICLEMASTR.cconduction **字段也分成一组。因为如果您正在使用任何聚合函数,则所有选定列的列表必须在Group by子句中。 – 2013-06-29 05:03:57

+0

换句话说,我只需要组合cplateno列... –

回答

2

“group by”子句必须为选定的每个列命名,除了那些是聚合函数的列以外。

FYI一个“聚合”函数是一个用于返回许多行的单个值,如求和(),COUNT()等

+0

...我应该将所有列按语句放在一个组中?正确? –

+0

是的。基本上复制粘贴你的选择子句到group by子句中,并删除加重值 – Bohemian

+0

它的工作..谢谢你的帮助..:D –

0

a.cconduction需要是group by子句英寸

当使用Group By子句时,列必须具有聚合函数(即COUNT)或在组中由中定义。

通过多重分组语句中的样本组:

SELECT column1_name, column2_name, aggregate_function(column_name3) 
FROM table_name 
WHERE column_name1 operator value 
GROUP BY column_name1, column_name2; 
0

您必须包括您在选择中提到,除了具有聚合函数的列中的所有字段,以便在你的情况将是:

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 functiona.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 
+0

仍然不工作..现在需要b.coloumns ...:D –

+0

@JesunBicar是的,我没有看到这样的loooonnnnggg查询;-) – Edper