2014-02-28 696 views
0

我在分组语句时遇到错误。这里是我的代码SQL中关键字'GROUP'附近的语法错误

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) , 
     DATENAME(weekday, date_time) 
ORDER BY DATEPART(Year, date_time) , 
     DATEPART(month, date_time) , 
     CONVERT(DATE, date_time) 

SELECT @avg_volume 

我所试图做的是,采取从卷组的总和由一组条件(内查询),作为

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 

现在我想,这将给结果取平均值。任何援助都会有所帮助。

我的表主表

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 

所需的输出:

station id  year month  weekday average_volume 
    7   2013  2  Thursday  194 

回答

1

有在查询一些基本的问题。你正在总结和发现月份的基础上的平均日期等。我没有看到任何过滤器,一年或一个月或站点ID。所以我假设您的最终选择查询中将有多行,并且您正在选择一个变量。所以你可能只从变量的第一行/最后一行得到值(当然取决于排序)。你必须在这里对查询进行一些修改。

这个查询是否给你正确的输出?

SELECT 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) 
      ORDER BY DATEPART(year, date_time) , 
        DATEPART(month, date_time) , 
        CONVERT(DATE, date_time) 
     ) T; 
+0

消息207,级别16,状态1,行17 无效的列名'date_time'。这是当我运行你的查询得到的,注意:我有同名的那个列@sathesh – bibinmatthew

1

根据您想要做什么,你不需要做第二次明确的聚集或order by。只是取平均值:

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) 
     ) t; 

您的特定错误是因为你对的子查询没有别名(当然,关键字group不能算作一个别名)。

你的一些列名称是关键字,所以我引用了这些。这些单词的列表是here

其实,写这样的查询时,你并不需要包括在select所有列,所以你也可以这样做:

DECLARE @avg_volume INT 
SELECT @avg_volume = ISNULL(AVG(Total_Volume), 0) 
FROM (SELECT 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) 
     ) t; 
+0

我想要做的是从卷列中包含数据每小时的值的总和..所以我采取按年份,月份,车站和工作日分组,然后按照我的要求得到所需的总量。现在我需要做的是取平均值。就像一个月内所有星期四的平均值一样。 – bibinmatthew

+0

任何帮助??????? – bibinmatthew

2

您需要命名的子查询:

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) 

     ) AnyNameYouLikeButYouHaveToGiveOne --<-- Here 

GROUP BY station_id , 
     CONVERT(DATE, date_time) , 
     DATEPART(month, date_time) , 
     DATEPART(Year, date_time) , 
     DATENAME(weekday, date_time) 
ORDER BY DATEPART(Year, date_time) , 
     DATEPART(month, date_time) , 
     CONVERT(DATE, date_time) 

SELECT @avg_volume 
相关问题