2016-12-29 8 views
2

Можно ли указать, что вызывает у меня, чтобы получить некорректное выражение«ORDER BY CASE, ...» вызывает некорректное выражение в ORDER BY пункте

в ORDER BY пункте (не содержится ни в статистической функции или предложение GROUP BY)

Ошибка при следующем запросе? Это в Firebird 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' столбец после группировки. Или включите yr в свой выбор или измените свой заказ на – GurV

+1

'order by 2' должно быть в порядке на данный момент – GurV

+0

@GurwinderSingh спасибо! – Phil

ответ

2

Вы не можете использовать YR колонку в order by, потому что это не часть результата группировки. Похоже, вы просто хотите заказать сгенерированной 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' (просто дон ' t зависит от него). –

-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. –