2014-09-24 4 views
0

У меня есть таблица, которая дает единицу продаж разных товаров в день. Я хочу суммировать продажи для ряда пользовательских (фактически произвольных, без возможности указания непосредственно из данных) периодов.Раздел по заданным пользователем значениям sql

Я пытаюсь сделать это, создав поле, в котором указывается, находится ли какая-либо дата периода, а затем я могу группировать это. Однако мой код дает мне ошибку «ORA-00923: ключевое слово FROM не найдено, где ожидалось».

МОЙ КОД:

select 
SUM(UNIT_SALES), 
PERIOD = 
    CASE 
      WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      ELSE 'NO PERIOD ASSIGNED' 
    END 
FROM MY_SALES_DAILY 
GROUP BY PERIOD 
ORDER BY PERIOD 

Как я могу достичь этой суммы на определенные пользователем периоды?

ответ

0

Ваш синтаксис неверен. PERIOD = неверен. См. Исправленный SQL ниже.

select 
SUM(UNIT_SALES), 
    CASE 
      WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      ELSE 'NO PERIOD ASSIGNED' 
    END AS PERIOD 
FROM DW_MASTER_SALES_DAILY 
GROUP BY  CASE 
      WHEN DAY_DATE >= TO_DATE('04/07/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('26/09/2013', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      WHEN DAY_DATE >= TO_DATE('27/09/2013', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('01/04/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      WHEN DAY_DATE >= TO_DATE('14/05/2014', 'DD/MM/YYYY') AND DAY_DATE <= TO_DATE('21/09/2014', 'DD/MM/YYYY') THEN 'Start of Period of pre_activity' 
      ELSE 'NO PERIOD ASSIGNED' 
      END 
ORDER BY PERIOD 
+0

Большое спасибо за вашу помощь. При использовании вашего кода я получаю сообщение об ошибке «INVALID SQL STATEMENT». Однако я использую TOAD, который я нашел, немного отличается от того, что я использовал ранее. Могу ли я спросить, что вы используете для своего кода? – branches

+0

Я использую TSQL в этом примере. Какие СУБД вы используете? Oracle, mysql,? – JNevill

+1

Здравствуйте, извините, что оказалось, что это не проблема. Мне нужно было привести дело в группу, теперь оно работает. Я отредактировал ответ. Спасибо за вашу помощь. – branches

Смежные вопросы