Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запрос Access 2003
 
 автор: gant   (30.01.2013 в 01:05)   личное сообщение
 
 

SNIPE, я поторопился с исчезновением и снова к Вам. Как и соощал, запрос работает отлично. Но. В одном отчете надо показать недорлативших или еще ВООБЩЕ не плативших.
Применительно к уже показанному примеру: В ТабА могут быть еще строки
VertragNr=28 Result =0
VertragNr=29 Result=0
Запрос сформирует в колонке Postup пустые данные NULL. И это правильно!
На базе этого запроса строится отчет.
В условии отчета записано:
. . . . . wherecondition:=" - - - (Voll - Postup} > 0.25 - - - "
Поскольку Postup IS NULL , то и полное выражение будет NULL и не отразится в отчете.
Мой вопрос может звучать совсем дурацки: нет ли возможности в запросе вместо NULL сформировать 0 денежный. Это было бы для меня самое простое решение. Но чувствую - так обычно не делают.
Может wherecondition:= должен быть другим.
Ранее у меня в таблице был 0 денежный и такая проблема не всплывала.
Если что посоветуете, эксперименты делаю сам и затем доложу.

  Ответить  
 
 автор: snipe   (30.01.2013 в 05:20)   личное сообщение
 
 

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

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

  Ответить  
 
 автор: gant   (30.01.2013 в 14:47)   личное сообщение
 
 

Об 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().

  Ответить  
 
 автор: snipe   (30.01.2013 в 18:48)   личное сообщение
11 Кб.
 
 

Например вот =>

  Ответить  
 
 автор: gant   (30.01.2013 в 19:40)   личное сообщение
 
 

Спасибо, SNIPE. Этот запрос работает. Но мне колонки признака оплаты и Индикаторы оплаты совсем не нужны. Есть ли возможность для Догов. Нр.1 в Колонке ОПЛАТА вместо пустого значения сформировать арифметический нуль 0. Под это у меня уже все настроено,
т.к. ранее вместо генерируемого запроса использовалась таблица с уже подготовленным нулем.

  Ответить  
 
 автор: snipe   (31.01.2013 в 07:29)   личное сообщение
 
 

ну вот
как раз то что я вам говорил
запрос есть - а сам принцип где-то далеко

давайте делать вместе

и так из предыдущего топика есть запрос


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

  Ответить  
 
 автор: gant   (31.01.2013 в 13:35)   личное сообщение
 
 

SNIPE, СПАСИБО! ВСЕ это я еще должен переварить. На выходных буду пробовать, а на следующей неделе обязательно доложу о результатах.

  Ответить  
 
 автор: gant   (01.02.2013 в 16:00)   личное сообщение
 
 

SNIPE, СПА-СИ-БО! Для меня это не только замечательное решение, но и хорошая лекция.

  Ответить  
 
 автор: snipe   (01.02.2013 в 17:25)   личное сообщение
 
 

о сколько нам открытий чудных...
(А.С.Пушкин)

это рядовое решение
но тут на форуме есть действительно красивые решения

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList