2014-11-14 124 views
0

下面的查詢按預期執行,給我定的字段被查詢爲什麼我的查詢在添加SUM函數後失敗?

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以下錯誤,它甚至與使用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()函數後才失敗?

+0

任何不在聚合中的字段(如'sum()')必須位於「GROUP BY」中 – 2014-11-14 18:06:25

+0

我不確定,但我認爲這是因爲沒有分組。我認爲添加一個聚合函數會迫使開發者添加一個group by子句。你可以嘗試在田野上做一個小組嗎? – Rika 2014-11-14 18:08:14

+0

AFAIK SQL Server *在使用聚合函數時需要* GROUP BY。有RDBMS(如MySQL)跳過這一要求 – Barranka 2014-11-14 18:13:53

回答

2
  1. 別名
  2. 你應該使用在集團所有列BY子句除了聚合函數
SELECT 1 as SEQ, 
TERM_DESC as TERM, 
PRIMARY_COLLEGE_DESC as COLLEGE, 
LEVEL_GROUPING_CODE as  LEVEL_CODE, 
SUM(ID_COUNT) as HEADCOUNT 
from SECopy 
GROUP BY TERM_DESC,PRIMARY_COLLEGE_DESC,LEVEL_GROUPING_CODE 
1

您需要將您的SELECT語句中的所有字段粘貼到GROUP BY子句中,但不會被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 
不需要對錶
1

您需要爲查詢添加分組標準。

在SQL服務器(和許多其他SQL的RDBMS),需要分組列的定義聚合函數:

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

根據您的實際需求,你可能會尋找

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