2016-12-29 94 views
2

任何人都可以指出是什么原因造成我获得“ORDER BY CASE ......”为了使无效表达BY子句

无效表达ORDER BY子句(不包含在聚合函数或GROUP BY子句)

有关以下查询的错误?这是在火鸟2.5。

SELECT COUNT(*) AS total, 
     CASE WHEN YR BETWEEN 1990 AND 1995 THEN '1990-1995' 
      WHEN YR BETWEEN 1996 AND 2000 THEN '1996-2000' 
      WHEN YR BETWEEN 2001 AND 2005 THEN '2001-2005' 
      ELSE '2005-2017' END AS vehicle_year 
FROM bb_history 
GROUP BY 2 
ORDER BY CASE WHEN YR BETWEEN 1990 AND 1995 THEN 1 
       WHEN YR BETWEEN 1996 AND 2000 THEN 2 
       WHEN YR BETWEEN 2001 AND 2005 THEN 3 
       ELSE 4 END 
+1

有分组后没有'yr'列。要么包括年选择或修改您的订单 – GurV

+1

'订购2'应该是现在就可以了 – GurV

+0

@GurwinderSingh谢谢! – Phil

回答

2

不能在order by使用YR列,因为它是不分组结果的一部分。看来你只是想通过生成的vehicle_year列顺序,因此你可以通过(或2)命令:

SELECT COUNT(*) AS total, 
     CASE WHEN YR BETWEEN 1990 AND 1995 THEN '1990-1995' 
      WHEN YR BETWEEN 1996 AND 2000 THEN '1996-2000' 
      WHEN YR BETWEEN 2001 AND 2005 THEN '2001-2005' 
      ELSE '2005-2017' END AS vehicle_year 
FROM bb_history 
GROUP BY 2 
ORDER BY vehicle_year; 
+1

按照实施方式,很可能它已经被排序而没有'order by'(仅仅是'取决于它)。 –

-2

你只有两个选择列,为什么你加入“3”和“4”,但这里是查询:

SELECT COUNT(*) AS total, 
     CASE WHEN YR BETWEEN 1990 AND 1995 THEN '1990-1995' 
      WHEN YR BETWEEN 1996 AND 2000 THEN '1996-2000' 
      WHEN YR BETWEEN 2001 AND 2005 THEN '2001-2005' 
      ELSE '2005-2017' END AS vehicle_year 
FROM bb_history 
GROUP BY 2 
ORDER BY CASE WHEN vehicle_year BETWEEN 1990 AND 1995 THEN 1 
       WHEN vehicle_year BETWEEN 1996 AND 2000 THEN 2 
       WHEN vehicle_year BETWEEN 2001 AND 2005 THEN 3 
       ELSE 4 END 
+0

这种情况下,不会按列索引排序,而是按**值** 1,2,3或4排序。 –