将CASE与GROUP BY一起使用时出现SQL Server错误

时间:2016-01-22 12:56:02

标签: sql-server sql-server-2012

我收到错误"每个GROUP BY表达式必须包含至少一个不是外部引用的列。"在SQL Server中运行以下查询时。

DECLARE @runDate smalldatetime = GETDATE()
SELECT  @runDate AS RunDate,
    Division, 
    Product ,
    CASE WHEN Score >= 0 AND Score <= 6 THEN 'GOOD'
         WHEN Score IN (7,8) THEN 'EXCELLENT'
         WHEN Score IN (9,10) THEN 'OUTSTANDING'
         ELSE 'INVALID' END AS Rank,
    COUNT(*) AS TOTAL
    FROM  CurrentAnalysis
    WHERE  TimeStamp  >  @runDate - 1 
           AND  TimeStamp  <=  @runDate
           AND  Source IN ('XXX', 'AAA') 
    GROUP BY  @runDate, 
              Division, Product,
              CASE WHEN Score >= 0 AND Score <= 6 THEN 'GOOD'
                   WHEN Score IN (7,8) THEN 'EXCELLENT'
                   WHEN Score IN (9,10) THEN 'OUTSTANDING'
                   ELSE 'INVALID' END

我在GROUP BY中给出了相同的CASE,但仍然得到相同的错误。有人能帮助我吗?

1 个答案:

答案 0 :(得分:3)

错误消息与group by中包含变量有关,如果删除它,你应该没事:

GROUP BY  Division, Product,
          CASE WHEN Score >= 0 AND Score <= 6 THEN 'GOOD'
               WHEN Score IN (7,8) THEN 'EXCELLENT'
               WHEN Score IN (9,10) THEN 'OUTSTANDING'
               ELSE 'INVALID' 
          END