使用别名的列总和时出错

时间:2018-06-24 06:42:56

标签: sql sql-server sql-server-2008

我是SQL新手。我有一个名为management的表。我正在尝试编写如下查询:

SELECT
    registerd, Appeared, registerd + Appeared AS col3 
FROM
    (SELECT 
         COUNT(REGDNO) AS registerd, branch_code,
         SUM(CASE WHEN SUB1_GRADE <> 'Ab' AND SUB1_GRADE IS NOT NULL OR
                       SUB2_GRADE <> 'Ab' AND SUB1_GRADE IS NOT NULL OR
                       SUB2_GRADE <> 'Ab ' AND SUB2_GRADE IS NOT NULL OR
                       SUB3_GRADE <> 'Ab' AND SUB3_GRADE IS NOT NULL OR 
                       SUB4_GRADE <> 'Ab' AND SUB4_GRADE IS NOT NULL OR  
                       SUB5_GRADE <> 'Ab' AND SUB5_GRADE IS NOT NULL OR 
                       SUB6_GRADE <> 'Ab' AND SUB6_GRADE IS NOT NULL OR 
                       SUB7_GRADE <> 'Ab' AND SUB7_GRADE IS NOT NULL
                 THEN 1 ELSE 0 END) As Appeared
     FROM 
         MANAGEMENT) AS subQueryAlias 
GROUP BY
    BRANCH_CODE

但是我遇到了以下错误

  

信息8120,第16级,状态1,第5行
  选择列表中的“ MANAGEMENT.BRANCH_CODE”列无效,因为它既不包含在聚合函数中也不在GROUP BY子句中

1 个答案:

答案 0 :(得分:2)

group by子句应该是内部子查询的一部分,而不是外部查询的一部分:

SELECT  registered, appeared, registered + appeared AS col3 
FROM    (SELECT   branch_code,
                  COUNT(regdno) AS registered,
                  SUM(CASE WHEN sub1_grade <> 'Ab' AND sub1_grade IS NOT NULL OR 
                                sub2_grade <> 'Ab' AND sub1_grade IS NOT NULL OR 
                                sub2_grade <> 'Ab' AND sub2_grade IS NOT NULL OR 
                                sub4_grade <> 'Ab' AND sub3_grade IS NOT NULL OR 
                                sub4_grade <> 'Ab' AND sub4_grade IS NOT NULL OR 
                                sub5_grade <> 'Ab' AND sub5_grade IS NOT NULL OR 
                                sub6_grade <> 'Ab' AND sub6_grade IS NOT NULL OR
                                sub7_grade <> 'Ab' AND sub7_grade IS NOT NULL
                           THEN 1 
                           ELSE 0
                      END) AS appeared
         FROM     management
         GROUP BY branch_code) AS subQueryAlias