Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Затрудняюсь построить запрос [D7, 2000]


Страницы:   1 2 3

RebroFF ©   (2006-12-11 13:39:00) 

Добрый день.Есть dbf-таблица движения материалов. Поля sklad(цех), nom (номенклатурный номер),sum (сумма прихода или расхода), vid (определяет, чем явл. сумма:приходом или расходом. 40-расход, остальные значения-приход). Задача: выбрать только те записи, сгруппировав по номенклатурному номеру и по цехам, для которых остаток (приход-расход) >1000.
Запрос "sql40" (выбираем с видом 40):

SELECT nomer,sklad,
SUM(mtb60."sum") Summ
FROM mtb60
WHERE vid = "40"
GROUP BY nomer,sklad

Запрос "sqlnot40" (с видом не равным 40, т. е. приход):

SELECT nomer,sklad,
SUM(mtb60."sum") Summ, sum(kol) skol
FROM mtb60
WHERE vid<>"40"
GROUP BY nomer,sklad

Общий запрос:

SELECT
a.nomer, b.nomer,a.sklad,b.sklad,a.Summ SummA, b.Summ SummB, a.Summ - b.Summ SummAB,
FROM
"sumNot40.sql" a
JOIN "sum40.sql" b ON (a.nomer = b.nomer and a.sklad=b.sklad and a.sklad=:nomskl)
WHERE
a.Summ - b.Summ > 1000

Проблема в том, что, если по определённому номенк. номеру расхода не было, значит и нет соотв. записи для такого номера с видом "40", а значит a.Summ - b.Summ не имеет смысла. Но этом случае нужно считать расход равным 0 и в остаток попадает весь приход. Помогите реализовать. Заранее премного благодарен.


RebroFF   (2006-12-11 14:58:00) [21]


> соответствующие ссылочные данные

Ошибся. Никаких ссылок нет. Связь между приходом и расходом только по соотв. номенклатурному номеру.


RebroFF   (2006-12-11 14:55:00) [22]

Помогите. Правда, очень надо.


Сергей М.   (2006-12-11 14:55:00) [23]


> RebroFF   (11.12.06 14:49) [19]


> Да


Тогда не понятно, почему ты не используешь для связи расходов с приходами соответствующие ссылочные данные ... При партионном учете они должно при сутствовать в том или ином виде.


RebroFF   (2006-12-11 14:54:00) [24]


> Телепатия

Никак нет. Уже уточнял: с базой работаю с использованием стандартных драйверов BDE, набор данных: TQuery


Anatoly Podgoretsky   (2006-12-11 14:50:00) [25]

> Сергей М.  (11.12.2006 14:44:18)  [18]

Телепатия, но в данном случае никакие функции Фокса не используются, а используется SQL-92 его подмножество.


RebroFF   (2006-12-11 14:49:00) [26]


> А всего лишь добавив в поле SUM знак можно было бы избавить
> себя от здоровенного гемороя.

База проектировалась не мной.

> Могу ошибаться, но этот драйвер в части SQL-возможностей
> не реализует функциональности условного преобразования Null
> в 0.

Ага, не реализует...

> Списание (расход) осуществляется со ссылкой на конкретную
> партию оприходованной номенклатуры.

Да


Сергей М.   (2006-12-11 14:44:00) [27]


> Anatoly Podgoretsky ©   (11.12.06 14:36) [15]


Он, как я понял, пытается реализовать сабж средствами стандартного фоксового драйвера (не ОDBC и не OLEDB) в составе BDE.

Могу ошибаться, но этот драйвер в части SQL-возможностей не реализует функциональности условного преобразования Null в 0.


Сергей М.   (2006-12-11 14:40:00) [28]


> Не понял... А как это?


Списание (расход) осуществляется со ссылкой на конкретную партию оприходованной номенклатуры.


Sergey13   (2006-12-11 14:36:00) [29]

А всего лишь добавив в поле SUM знак можно было бы избавить себя от здоровенного гемороя.


Anatoly Podgoretsky   (2006-12-11 14:36:00) [30]

> Сергей М.  (11.12.2006 14:23:09)  [9]

Но он и не в Фоксе испольняет, а в чем молчит. Если в Фоксе, то чего он делает на сайте по Дельфи


RebroFF   (2006-12-11 14:31:00) [31]


> В фоксе смотреть в сторону  nvl и iif

Насколько я знаю, IIF реализована только в TSQL


novill   (2006-12-11 14:27:00) [32]

> Откуда в Фоксе возьмется coalasce ?

В фоксе смотреть в сторону   nvlи iif


RebroFF   (2006-12-11 14:27:00) [33]


> coalesce

"Insufficient memory for this operation"


RebroFF   (2006-12-11 14:24:00) [34]


> учет не партионный

Не понял... А как это?


novill   (2006-12-11 14:24:00) [35]

вместо coalasceчитать   coalesce

* в твоей базе может носить другое имя. В крайнем случае через if реализуемо.


Сергей М.   (2006-12-11 14:23:00) [36]


> novill ©   (11.12.06 14:21) [8]


Откуда в Фоксе возьмется coalasce ?


novill   (2006-12-11 14:21:00) [37]

А такая конструкция подойдет?

select ...  a.Summ - coalasce(b.Summ,0) SummAB
from приход
leftjoin расход
...


Сергей М.   (2006-12-11 14:21:00) [38]

У тебя, надо понимать, учет не партионный ?


RebroFF   (2006-12-11 14:18:00) [39]

Не подскажите, как поступить?


Сергей М.   (2006-12-11 14:15:00) [40]

При объединении "один к одному" не реально.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо