Jesun Bicar
Jesun Bicar

Reputation: 103

SQL Syntax Error Group By

I've got a sql syntax and it gives me the error:

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.

Here is the SQL syntax:

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 

Can anybody tell what went wrong?

Upvotes: 1

Views: 459

Answers (3)

Edper
Edper

Reputation: 9322

You must include all fields that you mentioned in your select except the column that has aggregate function so in your case it would be:

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

instead of

GROUP BY a.cplateno

Edit:

If you want only the a.cplateno then you don't include the rest of the fields except aggregate function and a.cplateno like:

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 

Upvotes: 0

Bohemian
Bohemian

Reputation: 424993

The "group by" clause must name every column selected, except those columns that are aggregate functions.

FYI an "aggregate" function is one that returns a single value for many rows, like sum(), count(), etc

Upvotes: 2

Jon Raynor
Jon Raynor

Reputation: 3892

a.cconduction needs to be in the group by clause.

When using a Group By clause, a column must either have an aggregate function (i.e. COUNT) or be defined in the group by.

A sample group by statement with multiple grouping:

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

Upvotes: 0

Related Questions