Falsche Syntax in der Nähe des Keyword 'GROUP' IN SQL bei durchschnittlicher

Ich habe einen Fehler beim Gruppieren der folgenden Aussage. Hier ist mein Code

DECLARE @avg_volume int SELECT @avg_volume=ISNULL(AVG(Total_Volume),0) FROM (SELECT station_id, DATEPART(YEAR,date_time) AS YEAR, DATEPART(MONTH,date_time) AS MONTH, CONVERT(date,date_time) AS DATE, DATENAME(weekday,date_time) AS weekday, sum(volume) AS Total_volume FROM rvtcs_data_aggregated_hourly GROUP BY station_id, CONVERT(date,date_time), DATEPART(MONTH,date_time), DATEPART(YEAR,date_time), DATENAME(weekday,date_time)) GROUP BY station_id, CONVERT(date,date_time), DATEPART(MONTH,date_time), DATEPART(YEAR,date_time), DATENA ME(weekday,date_time) ORDER BY DATEPART(YEAR,date_time), DATEPART(MONTH,date_time), CONVERT(date,date_time) SELECT @avg_volume 

Meine innere Abfrage wird zurückkehren

 station_id YEAR MONTH DATE weekday Total_volume 7 2013 2 2013-02-21 Thursday 192 7 2013 2 2013-02-27 Wednesday 2699 7 2013 2 2013-02-28 Thursday 196 2 2013 3 2013-03-07 Thursday 192 7 2013 3 2013-03-07 Thursday 192 

Meine primäre Tabelle ist:

 station_id date_time volume 7 2013-02-21 00:00:00.000 96 7 2013-02-21 01:00:00.000 96 7 2013-02-27 00:00:00.000 356 7 2013-02-27 00:00:00.000 410 7 2013-02-27 00:00:00.000 471 7 2013-02-27 00:00:00.000 530 7 2013-02-27 00:00:00.000 338 7 2013-02-27 00:00:00.000 211 7 2013-02-27 00:00:00.000 159 7 2013-02-27 00:00:00.000 128 7 2013-02-27 00:00:00.000 96 7 2013-02-28 00:00:00.000 96 7 2013-02-28 01:00:00.000 100 7 2013-03-07 00:00:00.000 96 2 2013-03-07 00:00:00.000 96 2 2013-03-07 01:00:00.000 96 7 2013-03-07 01:00:00.000 96 

Meine gewünschte Ausgabe ist:

 station id year month weekday average_volume 7 2013 2 Thursday 194 

Es gibt 3 Ausgaben in der Abfrage, die du gepostet hast:

  1. Wie von jedem korrekten Bezeichner DATENA ME zu DATENAME .
  2. Wenn eine innere Abfrage in definiert in From Klausel einer äußeren Abfrage ist es eigentlich eine 'Derived Table' Ihr scope der Existenz ist die äußere Abfrage. Sobald die äußere Abfrage beendet ist, ist die abgeleitete Tabelle weg. Also müssen wir die Abfrage angeben, die die abgeleitete Tabelle in Klammern definiert, gefolgt von der AS-Klausel und dem abgeleiteten Tabellennamen. (Unten habe ich es als 'T' )
  3. Nun, da wir uns auf Spalten aus einer abgeleiteten Tabelle in der äußeren Abfrage beziehen, können nur die darin definierten Spalten aufgerufen werden. (Also habe ich die äußeren Abfrage-Spalten korrigiert)

Schreiben als:

 --DECLARE @avg_volume int SELECT ISNULL(AVG(Total_Volume),0) as average_volume, station_id, MONTH, YEAR, weekday FROM (SELECT station_id, DATEPART(YEAR,date_time) AS YEAR, DATEPART(MONTH,date_time) AS MONTH, CONVERT(date,date_time) AS DATE, DATENAME(weekday,date_time) AS weekday, sum(volume) AS Total_volume FROM rvtcs_data_aggregated_hourly GROUP BY station_id, CONVERT(date,date_time), DATEPART(MONTH,date_time), DATEPART(YEAR,date_time), DATENAME(weekday,date_time)) AS T WHERE WEEKDAY = 'Thursday' AND MONTH=2 GROUP BY station_id, MONTH, YEAR, weekday ORDER BY YEAR, MONTH 

SQL FIDDLE: http://sqlfiddle.com/#!3/6217d/10

Es gibt einen Platz in deinem Code DATENAME

 DATENA ME(weekday,date_time) 

Schreiben als

 DATENAME(weekday,date_time) 

————————Ein weiterer Punkt———————— –

Du musst den Namen für deine Unterabfrage verwenden

 SELECT t1.yourColumn ( select yourColumn FROM tableABC ) t1 <you not assign name here to newly subquery created table eg t1> 

Verwenden Sie auch Spaltenaliasnamen wie

 SELECT t1.aliasName ( select yourColumn as [aliasName] FROM tableABC ) t1 ORDER BY t1.aliasName 

Geben Sie einen Aliasnamen Ihrer inneren Abfrage an und verwenden Sie dann diesen Aliasnamen in Ihrer äußeren Tabellengruppe nach statement

 (select station_id, DATEPART(Year,date_time) AS YEAR, DATEPART(month,date_time) AS MONTH, CONVERT(date,date_time) AS DATE, DATENAME(weekday,date_time) as weekday, sum(volume) AS Total_volume from rvtcs_data_aggregated_hourly group by station_id, CONVERT(date,date_time), DATEPART(month,date_time), DATEPART(Year,date_time), DATENAME(weekday,date_time) ) AS MYJUNCTIONTABLE 

Auch ich fand Zwischenräume zwischen DATE NA ME beim Kopieren deines Codes, siehe dessen Korrektur oben.