Запрос с GROUP BY с параметрами к Oracle

отредактировано 01:24 Раздел: FastReport 2.xx VCL
Извините, если несколько больше чем обычно займу Ваше внимание - SQL-запрос немаленький.
Есть запрос с GROUP BY к Ораклу. С параметрами. Параметры - из диалоговой формы самого отчёта.
Оракл на него ругается:
ORA-00979: not a group by expression
Если в тексте запроса явно указываю параметры - работает.
Если я выполняю запрос с параметрами не из ФастРепорта - работает.
Если я делаю просто селект из фастрепорта с теми же параметрами - работает.
Уже всю голову поломал - и типы параметров менял, и скобки ставил - не помогает и всё тут. А запрос рабочий. И параметры при простом селекте нормально передаются.

Вот собсно запрос:
SELECT
KWHDAY.SAMPLE_DATE AS S_D,
Sum(KWH30.SAMPLE_VALUE) AS SUM30,
KWHDAY.SAMPLE_VALUE AS SUMDAY,
MTRDAY_FROM.SAMPLE_VALUE AS MTR_FROM,
MTRDAY_TO.SAMPLE_VALUE AS MTR_TO,
(MTRDAY_TO.SAMPLE_VALUE - MTRDAY_FROM.SAMPLE_VALUE) AS MTRDIFF,
(MTRDAY_TO.SAMPLE_VALUE - MTRDAY_FROM.SAMPLE_VALUE)*MTRTYPE.C_TRANSFORM AS MTRSUM
FROM
NODES,
KWH30,
KWHDAY,
MTRDAY MTRDAY_FROM,
MTRDAY MTRDAY_TO,
MTRUSERPARAMETERS MTRTYPE
WHERE
((KWHDAY.SAMPLE_DATE >= :D_F) AND (KWHDAY.SAMPLE_DATE <= :D_T)) AND
((NODES.OBJECT_CODE=:O_C) AND (NODES.NODE_CODE=:N_C)) AND
(Trunc(KWH30.SAMPLE_DATE,'DD')=KWHDAY.SAMPLE_DATE) AND
(MTRDAY_FROM.SAMPLE_DATE=KWHDAY.SAMPLE_DATE) AND
(MTRDAY_TO.SAMPLE_DATE=(MTRDAY_FROM.SAMPLE_DATE + 1)) AND
((KWH30.OBJECT_CODE=NODES.OBJECT_CODE) AND (KWH30.NODE_CODE=NODES.NODE_CODE)) AND
((KWHDAY.OBJECT_CODE=NODES.OBJECT_CODE) AND (KWHDAY.NODE_CODE=NODES.NODE_CODE)) AND
((MTRDAY_FROM.OBJECT_CODE=NODES.OBJECT_CODE) AND (MTRDAY_FROM.NODE_CODE=NODES.NODE_CODE)) AND
((MTRDAY_TO.OBJECT_CODE=NODES.OBJECT_CODE) AND (MTRDAY_TO.NODE_CODE=NODES.NODE_CODE)) AND
((MTRDAY_FROM.OBJECT_CODE=MTRTYPE.OBJECT_CODE) AND (MTRDAY_FROM.NODE_CODE=MTRTYPE.NODE_CODE))
GROUP BY
KWHDAY.SAMPLE_DATE,
KWHDAY.SAMPLE_VALUE,
MTRDAY_FROM.SAMPLE_VALUE,
MTRDAY_TO.SAMPLE_VALUE,
MTRDAY_TO.SAMPLE_VALUE - MTRDAY_FROM.SAMPLE_VALUE,
(MTRDAY_TO.SAMPLE_VALUE - MTRDAY_FROM.SAMPLE_VALUE)*MTRTYPE.C_TRANSFORM
ORDER BY
KWHDAY.SAMPLE_DATE

Заранее спасибо за внимание.

Комментарии

  • отредактировано 01:24
    Ты бы хоть для начала сказал через какие компаненты ты к Ораклу ходишь и хде они (компаненты эти) у тебя лежат - в самом отчёте или в твоём приложении.
  • отредактировано 01:24
    Упс - оплошал. Пишу.
    TADOConnection - в основной форме приложения
    компоненты доступа к БД (ADO)- в самом отчёте
    Параметры берутся с диалоговой формы тоже в самом отчёте (ну это я писал).
    ТОЧНО такой же отчёт, но без группировки и агрегатных функций с той же самой формой работает, к примеру такой:

    SELECT
    KWHDAY.SAMPLE_DATE AS S_D,
    KWHDAY.SAMPLE_VALUE AS SUMDAY
    FROM
    KWHDAY
    WHERE
    ((KWHDAY.SAMPLE_DATE >= :D_F) AND (KWHDAY.SAMPLE_DATE <= :D_T)) AND
    ((KWHDAY.OBJECT_CODE=:O_C) AND (KWHDAY.NODE_CODE=:N_C))
    ORDER BY
    KWHDAY.SAMPLE_DATE
  • отредактировано 01:24
    Если ты говоришь что такой запрос с параметрами работает из самого приложения, то скорее всего у тебя что-то неправильно настроено в самом отчёте.
    Проверь типы ПАРАМЕТРОВ и ЗНАЧЕНИЯ у адошного квери в отчёте ...
  • отредактировано 01:24
    Дык дело в том, что ТОЧНО ТАКОЙ ЖЕ отчёт, с теми же параметрами, с теми же типами, но без GROUP BY и SUM() - работает. Текст запроса с параметрами из работающего отчёта я привёл.
    Даже не знаю что и думать...
  • отредактировано 01:24
    Я упростил запрос по самое не могу:
    Вот это работает:
    SELECT
    KWHDAY.NODE_CODE AS NODE_N,
    KWHDAY.SAMPLE_VALUE AS SUMDAY
    FROM
    KWHDAY
    WHERE
    (KWHDAY.OBJECT_CODE=:OBJECT_CODE)

    вот это - не работает: ошибка "not a group by expression"
    SELECT
    KWHDAY.NODE_CODE AS NODE_N,
    SUM(KWHDAY.SAMPLE_VALUE) AS SUMDAY
    FROM
    KWHDAY
    WHERE
    (KWHDAY.OBJECT_CODE=:OBJECT_CODE)
    GROUP BY
    KWHDAY.NODE_CODE
    В одном и том же отчёте с одними и теми же параметрами - то есть при прочих равных условиях.
  • maomao
    отредактировано 01:24
    Есть такая штука sqlmonitor. Если ей воспользоваться и посмотреть, как твой SELECT в натуре выглядит, когда к ораклу идет.
  • отредактировано 01:24
    Да уж - это было бы интересно, я даже так и собирался сделать. А потом решил - что это длинный путь, да ещё и без гарантии на результат - ну что я буду делать, если увижу, что Оракл не так получает запрос или параметры? Вот и стал средствами самого ФР менять текст запроса - явно указывая параметры, а не передавая их с запросом. "Некрасиво" конечно, зато сделал быстро и работает.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.