-
Доброго дня. Уважаемые Мастера. Использую для заполнения таблицы запрос типа:
select meszap, count(*) from table where условие group by meszap
Такой запрос возвращает значения сгруппированные по месяцу результаты, но если за текущий месяц при заданном условии нет записей, то данный месяц вообще игнорируется в результате, т.е. если за февраль не было записей, то будет выведено:
1 - 5 3 - 4 4 - 6
В результате при попытке заполнения таблицы в цикле, где используется Query.Next получаю ерунду. Можно ли заствить Query вернуть пустой результат т.е.
1 - 5 2 - 0 3 - 4 4 - 6
Александр.
-
> alexnauz © (21.06.10 13:25)
Сделать можно. С исп. доп. таблицы, с UNION или ХП. Но лучше сделать что бы при использовании Query.Next текущий результат не казался ерундой.
-
> В результате при попытке заполнения таблицы в цикле, где > используется Query.Next получаю ерунду.
Проблема написать одно условие сравнения?
-
> alexnauz © (21.06.10 13:25)
Если верно понял, проблема в том что нет вообще записей, где например meszap имеет значение 2 (февраль) или еще какое-либо? В этом случае действительно будут пропущенные значения. Оракл почти забыл, как и имена его служебных таблиц, столбцов и т.п., но попробую накидать примерный вариант для Оракла select T1.M,count(T2.meszap) from
(select rownum as M from ALL_OBJECTS where rownum < 13) T1
LEFT JOIN
TABLE T2 ON T2.meszap=T1.M and <условие>
GROUP BY T1.M Идея в формировании псевдо стобца T1.M, который имеет все нужные значения (у нас от 1 до 12) и левое объединение его уже с реальным столбцом реальной таблицы
-
Не проблема включить в цикл изменяемый Query, но описанным выше одним запросом, куда реально входило с десяток всяких sum, целиком заполнялась отчётная таблица и всё прекрасно работало пока не встретилось пустое значение. Написать условие сравнения вполне возможно, но в программе считается семь разных таблиц подобным способом, значит условия сравнения надо писать во всех случаях, причём, учитывая что в программе возможно задавать период счёта (за месяц, за квартал, за год, с марта по ноябрь и т. п.), то условие сравнения выливается не в одну строку текста. Конечно, число строк не пугает, но тогда проще включить в цикл изменяемый Query.
|