|
|
|
| SNIPE, я поторопился с исчезновением и снова к Вам. Как и соощал, запрос работает отлично. Но. В одном отчете надо показать недорлативших или еще ВООБЩЕ не плативших.
Применительно к уже показанному примеру: В ТабА могут быть еще строки
VertragNr=28 Result =0
VertragNr=29 Result=0
Запрос сформирует в колонке Postup пустые данные NULL. И это правильно!
На базе этого запроса строится отчет.
В условии отчета записано:
. . . . . wherecondition:=" - - - (Voll - Postup} > 0.25 - - - "
Поскольку Postup IS NULL , то и полное выражение будет NULL и не отразится в отчете.
Мой вопрос может звучать совсем дурацки: нет ли возможности в запросе вместо NULL сформировать 0 денежный. Это было бы для меня самое простое решение. Но чувствую - так обычно не делают.
Может wherecondition:= должен быть другим.
Ранее у меня в таблице был 0 денежный и такая проблема не всплывала.
Если что посоветуете, эксперименты делаю сам и затем доложу. | |
|
| |
|
|
|
| ни чего не понял
однако если взять за основу прошлый пример, то
SELECT ТаблицаА.Номер_Договора,ТаблицаА.Сумма_Договора, a1.Поступление, iif(nz(a1.Поступление,0) - nz(ТаблицаА.Сумма_Договора,0)<0;1;0) as Индикатор_Оплаты
FROM ТаблицаА LEFT JOIN (SELECT ТаблицаВ.Номер_Договора, Sum(ТаблицаВ.Платеж) AS Поступление FROM ТаблицаВ GROUP ТаблицаВ.Номер_Договора) AS a1
ON ТаблицаА.Номер_Договора = a1.Номер_Договора
Where iif(nz(a1.Поступление,0) - nz(ТаблицаА.Сумма_Договора,0)<0,1,0)=1
функция nz() (про себя я ее называю Nет Zначения) позволяет заменить null, "" на то значение которое нужно (есть только в аксе - ну в смысле что в VBA excel word .... её нет)
недоплатившие
Select a2.*
from
(
SELECT ТаблицаА.Номер_Договора,ТаблицаА.Сумма_Договора, a1.Поступление, iif(nz(a1.Поступление,0) - nz(ТаблицаА.Сумма_Договора,0)<0;1;0) as Индикатор_Оплаты
FROM ТаблицаА LEFT JOIN (SELECT ТаблицаВ.Номер_Договора, Sum(ТаблицаВ.Платеж) AS Поступление FROM ТаблицаВ GROUP ТаблицаВ.Номер_Договора) AS a1
ON ТаблицаА.Номер_Договора = a1.Номер_Договора
Where iif(nz(a1.Поступление,0) - nz(ТаблицаА.Сумма_Договора,0)<0,1,0)=1
) as a2
Where iif(nz(a2.Поступление,0)=0,1,0)=0
не оплатившие вообще
Select a2.*
from
(
SELECT ТаблицаА.Номер_Договора,ТаблицаА.Сумма_Договора, a1.Поступление, iif(nz(a1.Поступление,0) - nz(ТаблицаА.Сумма_Договора,0)<0;1;0) as Индикатор_Оплаты
FROM ТаблицаА LEFT JOIN (SELECT ТаблицаВ.Номер_Договора, Sum(ТаблицаВ.Платеж) AS Поступление FROM ТаблицаВ GROUP ТаблицаВ.Номер_Договора) AS a1
ON ТаблицаА.Номер_Договора = a1.Номер_Договора
Where iif(nz(a1.Поступление,0) - nz(ТаблицаА.Сумма_Договора,0)<0,1,0)=1
) as a2
Where iif(nz(a2.Поступление,0)=0,1,0)=1 | |
|
| |
|
|
|
| Об NZ() я понятия не имел и вообще уже разучился выражать мысли на родном языке. Прошлый пример в реальности:
TabA
- - - - - - - - - -
VertragNr Result
25 0?
26 0?
27 0?
28 0?
29 0? т. е. есть еще две строчки.
TabB остается прежней
TabB
--------
LiefNr Oplata
25 3?
26 2 ?
25 3?
25 5?
26 10?
27 10?
27 15? Здесь отсутствуют данные о VertgNr 28 и 29. Оплаты, даже частичной еще не было. Но это тоже должник!
Тогда в результате запроса получится:
VertragNr Postup это я заменил латинскими буквами (A1.Поступление)
- - - - - - -- - - - - - -
25 11?
26 12?
27 25?
28 NULL
29 NULL
При формировании отчета на базе этого запроса строчки с VertragNr=28 и 29 не появятся.
Postup is NULL, значит выражение в условии (Voll - Postup) > 0.25 тоже IS NULL и условие срабатывает неправильно, т.е. строки с Dogovor Nr 28 и 29 в отчете отсутствуют.
Если бы в запросе было сформировано
VertragNr Postup
- - - - - - -- - - - - - -
25 11?
26 12?
27 25?
28 0?
29 0?
все было бы в порядке.
Как будет выглядеть Ваш вариант запроса в прошлом сообщении (это мне подошло!) с применение F. NZ(). | |
|
| |
|
11 Кб. |
|
| Например вот => | |
|
| |
|
|
|
| Спасибо, SNIPE. Этот запрос работает. Но мне колонки признака оплаты и Индикаторы оплаты совсем не нужны. Есть ли возможность для Догов. Нр.1 в Колонке ОПЛАТА вместо пустого значения сформировать арифметический нуль 0. Под это у меня уже все настроено,
т.к. ранее вместо генерируемого запроса использовалась таблица с уже подготовленным нулем. | |
|
| |
|
|
|
| ну вот
как раз то что я вам говорил
запрос есть - а сам принцип где-то далеко
давайте делать вместе
и так из предыдущего топика есть запрос
SELECT ТаблицаА.Номер_Договора,ТаблицаА.Сумма_Договора, a1.Поступление
FROM ТаблицаА LEFT JOIN (SELECT ТаблицаВ.Номер_Договора, Sum(ТаблицаВ.Платеж) AS Поступление FROM ТаблицаВ GROUP ТаблицаВ.Номер_Договора) AS a1
ON ТаблицаА.Номер_Договора = a1.Номер_Договора
|
теперь поймите принцип
Select это столбцы которые отображаем в.т.ч. и расчетные
form это имена таблиц запросов или текст подзапросов откуда берутся данные
почему бы нам не сделать следующий фокус - в запрос который выше по рангу не запихать текст нашего запроса
т.е. Выглядеть будет так
Select a4.*
from (текст нашего запроса) as a4
|
Но наш запрос выдает данные с null а нам нужны с 0
делаем расчетный столбец
Select a4.Номер_Договора,a4.Сумма_Договора, nz(a4.Поступление,0) as Оплата
from (Текст нашего запроса) as a4
|
вот - в столбце Оплата появился 0 в договорах которые не оплачены
выглядеть будет так
Select a4.Номер_Договора,a4.Сумма_Договора, nz(a4.Поступление,0) as Оплата
from (SELECT ТаблицаА.Номер_Договора,ТаблицаА.Сумма_Договора, a1.Поступление
FROM ТаблицаА LEFT JOIN (SELECT ТаблицаВ.Номер_Договора, Sum(ТаблицаВ.Платеж) AS Поступление FROM ТаблицаВ GROUP ТаблицаВ.Номер_Договора) AS a1
ON ТаблицаА.Номер_Договора = a1.Номер_Договора) as a4
|
| |
|
| |
|
|
|
| SNIPE, СПАСИБО! ВСЕ это я еще должен переварить. На выходных буду пробовать, а на следующей неделе обязательно доложу о результатах. | |
|
| |
|
|
|
| SNIPE, СПА-СИ-БО! Для меня это не только замечательное решение, но и хорошая лекция. | |
|
| |
|
|
|
| о сколько нам открытий чудных...
(А.С.Пушкин)
это рядовое решение
но тут на форуме есть действительно красивые решения | |
|
| |