![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Затрудняюсь построить запрос [D7, 2000]
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]При объединении "один к одному" не реально.