2012-02-15 1 views
0

Я хочу показать общее количество посещений в месяц за год. Но следующий запрос возвращает код ошибки отсутствующего выражения. Что я пропустил?количество посещений в месяц в этом году

SELECT CASE 
    WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '),  'mm/dd/yyyy') = 1 THEN 'January ' 
    WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 2 THEN 'February' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 3 THEN 'March' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 4 THEN 'April' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 5 THEN 'May' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 6 THEN 'June' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 7 THEN 'July' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 8 THEN 'August' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 9 THEN 'September' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 10 THEN 'October' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 11 THEN 'November' 
ELSE 'December' 
    END AS "Month " , 
    COUNT(*) AS "Number of visits" 
FROM allrecord where extract(year from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy')= extract(year from date sysdate) 
GROUP BY CASE 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 1 THEN 'January ' 
    WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 2 THEN 'February' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 3 THEN 'March' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 4 THEN 'April' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 5 THEN 'May' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 6 THEN 'June' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 7 THEN 'July' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 8 THEN 'August' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 9 THEN 'September' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 10 THEN 'October' 
WHEN extract(month from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy') = 11 THEN 'November' 

     ELSE 'December' 
      END; 

Дополнительный вопрос, который нужно задать, я создаю приложение, использующее построитель приложений ORACLE. Но после того, как я создал страницу и хочу редактировать записи в форме, сообщение об ошибке показывает, что данные могут быть извлечены. Что это значит? Любые шаги, которые я пропустил?

+2

этот запрос ?? –

+0

Мой опыт работы с Oracle почти отсутствует, но, как я понимаю, вы можете использовать 'TO_CHAR (visit_time, 'MONTH')' вместо этого громоздкого заявления о случаях? – GarethD

+0

За дополнительным вопросом в Oracle Application Builder вы можете запросить его отдельно и дать более подробную информацию об ошибке, которую вы получите. –

ответ

1

Не Oracle есть функция для извлечения MonthName с даты, как это:

SELECT TO_CHAR(visit_time 'MONTH') as month 
COUNT(*) AS "Number of visits" 
FROM allrecord 
WHERE extract(year from date TO_DATE (TO_CHAR (visit_time, 'mm/dd/yyyy '), 'mm/dd/yyyy')= extract(year from date sysdate) 
GROUP BY TO_CHAR(visit_time 'MONTH') 
4

Этот запрос может быть все конденсируется вниз:

select to_char(VISIT_TIME, 'fmMonth') as "Month" 
     ,count(*) as "Number of Visits" 
    from ALLRECORD 
    where extract(year from VISIT_TIME) = extract(year from sysdate) 
group by to_char(VISIT_TIME, 'fmMonth'); 

Недостающая ошибка выражения будет иметь исходят от размещения ключевого слова date перед to_date в функциях extract. Это не нужно. Вы бы использовать либо:

select extract (year from date '2011-01-01') from sys.dual 

или:

select extract (year from to_date('2011-01-01')) from sys.dual 

Но никогда:

select extract (year from date to_date('2011-01-01')) from sys.dual 
+0

То, что я не упоминал, - visit_time - это отметка времени – jannyeu

+0

Это прекрасно, 'to_char',' to_date', 'extract' и т. Д. Все работают с типами timestamp. –