Sql 为什么我的查询在添加SUM函数时失败?

Sql 为什么我的查询在添加SUM函数时失败?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,下面的查询按预期执行,在给定被查询字段的情况下提供预期的输出 SELECT 1 as SEQ, TERM_DESC as TERM, PRIMARY_COLLEGE_DESC as COLLEGE, LEVEL_GROUPING_CODE as LEVEL_CODE, LEVEL_GROUPING_DESC as LEVEL_DESC FROM SECopy as SE 然而,当我在一个字段上添加SUM函数时,我得到了以下关于TERM_DESC的错误,它甚至与ID_COUNT无关,SU

下面的查询按预期执行,在给定被查询字段的情况下提供预期的输出

SELECT 1 as SEQ, TERM_DESC as TERM, PRIMARY_COLLEGE_DESC as COLLEGE, LEVEL_GROUPING_CODE as     LEVEL_CODE, LEVEL_GROUPING_DESC as LEVEL_DESC
FROM SECopy as SE
然而,当我在一个字段上添加SUM函数时,我得到了以下关于TERM_DESC的错误,它甚至与ID_COUNT无关,SUM函数用于ID_COUNT

SELECT 1 as SEQ, TERM_DESC as TERM, PRIMARY_COLLEGE_DESC as COLLEGE, LEVEL_GROUPING_CODE as     LEVEL_CODE, LEVEL_GROUPING_DESC as LEVEL_DESC, SUM(ID_COUNT) as HEADCOUNT
from SECopy as se 
我得到以下错误:

Column 'Student_Enrollment_copy.TERM_DESC' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

为什么只有在添加SUM函数后才会失败?

您需要粘贴SELECT语句中的任何字段,但这些字段不是由SUM、AVG、MIN等聚合的。。。按子句分组:

SELECT 
    1 AS SEQ,
    TERM_DESC AS TERM,
    PRIMARY_COLLEGE_DESC AS COLLEGE,
    LEVEL_GROUPING_CODE AS LEVEL_CODE,
    LEVEL_GROUPING_DESC AS LEVEL_DESC,
    SUM(ID_COUNT) AS HEADCOUNT
FROM SECopy AS se
GROUP BY 
    TERM_DESC, PRIMARY_COLLECT_DESC,LEVEL_GROUPING_CODE,LEVEL_GROUPING_DESC

您需要粘贴SELECT语句中的任何字段,但这些字段不是通过SUM、AVG、MIN等进行聚合的。。。按子句分组:

SELECT 
    1 AS SEQ,
    TERM_DESC AS TERM,
    PRIMARY_COLLEGE_DESC AS COLLEGE,
    LEVEL_GROUPING_CODE AS LEVEL_CODE,
    LEVEL_GROUPING_DESC AS LEVEL_DESC,
    SUM(ID_COUNT) AS HEADCOUNT
FROM SECopy AS se
GROUP BY 
    TERM_DESC, PRIMARY_COLLECT_DESC,LEVEL_GROUPING_CODE,LEVEL_GROUPING_DESC
不需要表的别名 应该使用GROUPBY子句中的所有列,聚合函数除外 不需要表的别名 应该使用GROUPBY子句中的所有列,聚合函数除外
您需要向查询中添加分组条件

在SQL server和许多其他SQL RDBMS中,聚合函数需要定义分组列:

select ...., sum(...) ...  -- Fields, expresions and (aggregate) functions
from your_table -- and / or data sources
-- any where conditions
group by ... --- Grouping criteria

您需要向查询中添加分组条件

在SQL server和许多其他SQL RDBMS中,聚合函数需要定义分组列:

select ...., sum(...) ...  -- Fields, expresions and (aggregate) functions
from your_table -- and / or data sources
-- any where conditions
group by ... --- Grouping criteria

根据您的实际需要,您可能正在寻找

SELECT
  1 as SEQ
  , TERM_DESC as TERM
  , PRIMARY_COLLEGE_DESC as COLLEGE
  , LEVEL_GROUPING_CODE as LEVEL_CODE
  , LEVEL_GROUPING_DESC as LEVEL_DESC
  , (SELECT SUM(ID_COUNT) FROM SECOPY) as HEADCOUNT
from SECopy

根据您的实际需要,您可能正在寻找

SELECT
  1 as SEQ
  , TERM_DESC as TERM
  , PRIMARY_COLLEGE_DESC as COLLEGE
  , LEVEL_GROUPING_CODE as LEVEL_CODE
  , LEVEL_GROUPING_DESC as LEVEL_DESC
  , (SELECT SUM(ID_COUNT) FROM SECOPY) as HEADCOUNT
from SECopy

任何不在总和中的字段都必须在GROUP by中。我不确定,但我认为这是因为没有GROUP by。我认为添加聚合函数会迫使开发人员添加GROUPBY子句。可以尝试在字段上执行group by吗?AFAIK SQL Server在使用聚合函数时需要group by。有一些像MySQL这样的RDBMS会跳过这个要求。任何不在聚合中的字段,比如sum,都必须在GROUP by中。我不确定,但我认为这是因为没有GROUP by。我认为添加聚合函数会迫使开发人员添加GROUPBY子句。可以尝试在字段上执行group by吗?AFAIK SQL Server在使用聚合函数时需要group by。有些像MySQL这样的RDBMS跳过了这一要求