Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

Затрудняюсь построить запрос   Найти похожие ветки 

 
RebroFF   (2006-12-11 13:39) [0]

Добрый день.Есть 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 и в остаток попадает весь приход. Помогите реализовать. Заранее премного благодарен.


 
Сергей М. ©   (2006-12-11 13:42) [1]

Субд какая ?


 
RebroFF   (2006-12-11 13:46) [2]


> Субд какая ?

Вообще-то это АРМ, написанный не мной. Запрос нужен просто для печати отчёта определённого вида. Подключаюсь к фокспрошной базе через BDE.


 
Сергей М. ©   (2006-12-11 13:54) [3]

А почему бы не сделать все необходимые расчеты прямо в своем клиентском приложении ?


 
RebroFF   (2006-12-11 13:57) [4]

Тоже выход, но хотелось бы через запрос... Это реально?


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

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


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

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


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

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


 
novill ©   (2006-12-11 14:21) [8]

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

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


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


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


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


 
novill ©   (2006-12-11 14:24) [10]

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

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


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


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

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


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

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

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


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


> coalesce

"Insufficient memory for this operation"


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


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

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


 
Anatoly Podgoretsky ©   (2006-12-11 14:36) [15]

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

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


 
Sergey13 ©   (2006-12-11 14:36) [16]

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


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


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


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


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


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


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

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


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


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

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

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

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

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

Да


 
Anatoly Podgoretsky ©   (2006-12-11 14:50) [20]

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

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


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


> Телепатия

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


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


> RebroFF   (11.12.06 14:49) [19]


> Да


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


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

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


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


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

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


 
Сергей М. ©   (2006-12-11 14:58) [25]


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


Тем более.
Так что про coalesce и иже с ними можно смело забыть.


 
novill ©   (2006-12-11 14:58) [26]

> [14] RebroFF   (11.12.06 14:31)

Так выясни какими средствами располагает ТВОЙ драйвер!


 
RebroFF   (2006-12-11 15:04) [27]


> Так что про coalesce и иже с ними можно смело забыть.

А про что же всё-таки нужно вспомнить?


 
novill ©   (2006-12-11 15:07) [28]

> А про что же всё-таки нужно вспомнить?

А функция if для полей у тебя есть?


 
Сергей М. ©   (2006-12-11 15:11) [29]


> RebroFF   (11.12.06 15:04) [27]


Мое предложение остается в силе - выполняешь два отдельных запроса, суммирующих соответственно требуемые приходы и расходы, а разницу расчитываешь в кл.приложении


 
Anatoly Podgoretsky ©   (2006-12-11 15:19) [30]

Не coalesce, ни if, ни какие другие функции не применимы.
Синтаксис очень хорошо расписан в справке по LocalSql


 
Сергей М. ©   (2006-12-11 15:20) [31]


> novill ©   (11.12.06 15:07) [28]


Ну нет в sql-92 никаких if"ов, coalesce, nvl и иже с ними)

Все это фигурирует или в более поздних версиях sql-стандарта либо в тех или иных диалектах.. В случае с фоксовым драйвером в составе БДЕ ни о том ни о другом речи не идет


 
Anatoly Podgoretsky ©   (2006-12-11 15:25) [32]

> Сергей М.  (11.12.2006 15:11:29)  [29]

Это единственное, что будет в данной ситуации работать.
Но можно и один запрос с left join и далее все равно на клиенте, вот там даже if не потребуется если использовать TNumericField.AsInteger/Float/...


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


> Мое предложение остается в силе - выполняешь два отдельных
> запроса, суммирующих соответственно требуемые приходы и
> расходы, а разницу расчитываешь в кл.приложении

Деваться некуда...


 
Сергей М. ©   (2006-12-11 15:28) [34]


> Деваться некуда


Да уж...
лодка-то  - подводная)


 
RebroFF   (2006-12-11 15:28) [35]


> Но можно и один запрос с left join и далее все равно на
> клиенте, вот там даже if не потребуется если использовать
> TNumericField.AsInteger/Float/...

А поподробнее можно?


 
RebroFF   (2006-12-11 15:29) [36]


> Да уж...
> лодка-то  - подводная)

Лодка обычная, но в открытом море:)


 
novill ©   (2006-12-11 15:33) [37]

> [30] Anatoly Podgoretsky ©   (11.12.06 15:19)


> [31] Сергей М. ©   (11.12.06 15:20)


Как всё хорошо, что не приходится на SQL92 работать :)

> [35] RebroFF   (11.12.06 15:28)

А почему тебе не сделать просто вычислимое поле?


 
RebroFF   (2006-12-11 15:36) [38]


> А почему тебе не сделать просто вычислимое поле?

Например...


 
novill ©   (2006-12-11 15:40) [39]

Calculating fields
+
F1


 
RebroFF   (2006-12-11 15:41) [40]


> Calculating fields
> +
> F1

Нет, что такое вычисляемые поля я в курсе, но как это применимо в данной ситуации?



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.036 c
4-1156131902
ZLOFENIX
2006-08-21 07:45
2006.12.31
Получение нажатых клавиш


2-1166084082
Николай1
2006-12-14 11:14
2006.12.31
TApplicationEvents.onIdle не работает


4-1156024715
Алексей222
2006-08-20 01:58
2006.12.31
Как загрузить программу из resource в память и запустить её отту


4-1156150573
Alita
2006-08-21 12:56
2006.12.31
Перенаправить сообщение


15-1165261160
Loginov Dmitry
2006-12-04 22:39
2006.12.31
Достала одна прога





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский