Не одна функция группы в оплаченную дату - PullRequest
0 голосов
/ 12 июня 2019

У меня есть оракул 11g SQL-код для отображения еженедельного отчета, но получаю ошибку ORA-00937: не групповая функция для одной группы. и курсор ошибки указывал на первую строку. PAID_DATE => TO_CHAR (PAID_DATE, 'YEAR') "YEAR",

SELECT
    TO_CHAR(PAID_DATE, 'YEAR') "YEAR", 
    TO_CHAR(PAID_DATE, 'MONTH') "MONTH",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '1' AND TO_CHAR(PAID_DATE, 'DD') <=7 THEN TOTAL_PAID ELSE 0 END) "MINGGU1",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '8' AND TO_CHAR(PAID_DATE, 'DD') <=15 THEN TOTAL_PAID ELSE 0 END) "MINGGU2",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '16' AND TO_CHAR(PAID_DATE, 'DD') <=23 THEN TOTAL_PAID ELSE 0 END) "MINGGU3",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '24' THEN TOTAL_PAID ELSE 0 END) "MINGGU4"
FROM 
    PAID_TABLE

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Вам не хватает GROUP BY.Однако я бы не рекомендовал делать сравнения строк для дня месяца.

Вместо этого:

SELECT TO_CHAR(PAID_DATE, 'YEAR MONTH') as YEAR_MONTH, 
       SUM(CASE WHEN EXTRACT(DAY FROM PAIDDATE) BETWEEN 1 AND 7 THEN TOTAL_PAID ELSE 0 END) as MINGGU1,
       SUM(CASE WHEN EXTRACT(DAY FROM PAIDDATE) BETWEEN 8 AND 15 THEN TOTAL_PAID ELSE 0 END) as MINGGU2,
       SUM(CASE WHEN EXTRACT(DAY FROM PAIDDATE) BETWEEN 16 AND 23 THEN TOTAL_PAID ELSE 0 END) as MINGGU3,
       SUM(CASE WHEN EXTRACT(DAY FROM PAIDDATE) >= 24 THEN TOTAL_PAID ELSE 0 END) as MINGGU4
FROM PAID_TABLE
GROUP BY TO_CHAR(PAID_DATE, 'YEAR MONTH')
ORDER BY MIN(PAID_DATE);

Обратите внимание, что это также объединяет первые два столбца в один столбец.Если вы собираетесь записывать дату в виде строк, один столбец имеет смысл для меня (хотя я предпочитаю формат 'YYYY-MM').

Я добавил ORDER BY, чтобы строки возвращались в хронологическом порядке.

0 голосов
/ 12 июня 2019

Вы должны добавить предложение GROUP BY, чтобы указать столбцы, по которым вы группируете:

SELECT
    TO_CHAR(PAID_DATE, 'YEAR') "YEAR", 
    TO_CHAR(PAID_DATE, 'MONTH') "MONTH",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '1' AND TO_CHAR(PAID_DATE, 'DD') <=7 THEN TOTAL_PAID ELSE 0 END) "MINGGU1",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '8' AND TO_CHAR(PAID_DATE, 'DD') <=15 THEN TOTAL_PAID ELSE 0 END) "MINGGU2",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '16' AND TO_CHAR(PAID_DATE, 'DD') <=23 THEN TOTAL_PAID ELSE 0 END) "MINGGU3",
    SUM(CASE WHEN TO_CHAR(PAID_DATE, 'D') >= '24' THEN TOTAL_PAID ELSE 0 END) "MINGGU4"
FROM 
    PAID_TABLE
GROUP BY TO_CHAR(PAID_DATE, 'YEAR'), TO_CHAR(PAID_DATE, 'MONTH') -- added line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...