Oracle SQL умеренно сложный кейс-запрос - PullRequest
0 голосов
/ 08 декабря 2011

Вот моя проблема: перечислите title_id, pubdate и название месяца (например, «May»), в которых опубликовано больше всего книг. Я на Oracle 10g Express. Вот мой запрос:

       SELECT count(EXTRACT(MONTH FROM pubdate)), title_id  
       CASE EXTRACT(MONTH FROM pubdate)
 WHEN 2 THEN 'February'
 WHEN 3 THEN 'March'
 WHEN 4 THEN 'April'
 WHEN 5 THEN 'May'
 WHEN 6 THEN 'June'
 WHEN 7 THEN 'July'
 WHEN 8 THEN 'August'
 WHEN 9 THEN 'September'
 WHEN 10 THEN 'October'
 WHEN 11 THEN 'November'
 WHEN 12 THEN 'December'
END 
  FROM titles t, publishers p 
  WHERE t.pub_id=p.pub_id 
  AND pubdate in 
(select max(EXTRACT(MONTH FROM pubdate)) from titles group by t.title_id)
GROUP BY t.title_id 
ORDER BY count(EXTRACT(MONTH FROM pubdate));

В Oracle сообщается, что ожидаемое ключевое слово FROM не найдено. Любые эксперты могут посмотреть на это и сказать, где я не прав?

1 Ответ

1 голос
/ 08 декабря 2011

Вам не хватает запятой между title_id and Case

SELECT count(EXTRACT(MONTH FROM pubdate)), title_id , <----- comma needs to be here
       CASE EXTRACT(MONTH FROM pubdate)
 WHEN 2 THEN 'February'
 WHEN 3 THEN 'March'
 WHEN 4 THEN 'April'
 WHEN 5 THEN 'May'
 WHEN 6 THEN 'June'
 WHEN 7 THEN 'July'
 WHEN 8 THEN 'August'
 WHEN 9 THEN 'September'
 WHEN 10 THEN 'October'
 WHEN 11 THEN 'November'
 WHEN 12 THEN 'December'
END 

Интересно, если вы используете Instant SQL Formatter

Вы получите гораздо лучшее сообщение об ошибке

EXTRACT (2,13) ​​ожидаемый токен: . ) ОТ INTO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...