powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сложный запрос
25 сообщений из 55, страница 1 из 3
Сложный запрос
    #33567487
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДАно:
Table1 - Поля: ID, Quant
Table2 - Поля: ID, Quant

Требуется:
1)Выбрать все значения из Table1, где Quant > 0 (не проблема)
Table3:
Select
Id As Id,
Quant As Quant
From
Table1
Where
Quant > 0

2)Выбрать все значения из получившейся Table3. в итоге должна получится Table4 = Table3 за исключением строк в которых Table2.ID = Table3.ID. в этих строках Quant = Table3.Quant - Table2.Quant

У меня получается отобрать только те строки в которых ID равны.
как сделать???
...
Рейтинг: 0 / 0
Сложный запрос
    #33567520
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select * from Table1 where Quant>0 and ID not in(select ID from Table2)
...
Рейтинг: 0 / 0
Сложный запрос
    #33567549
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMedselect * from Table1 where Quant>0 and ID not in(select ID from Table2)
дык получить их в разных таблица можно. как объеденить в одну?
...
Рейтинг: 0 / 0
Сложный запрос
    #33567559
mvictor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что то типа этого

select t3.id,t3.quant from table3 t3 where not exists (select 1 from table2 where t3.id=table2.id)
union all
select t3.id,t3.quant-table2.quant from table3 t3
join table2 on t3.id=table2.id
...
Рейтинг: 0 / 0
Сложный запрос
    #33567646
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firerer AleksMedselect * from Table1 where Quant>0 and ID not in(select ID from Table2)
дык получить их в разных таблица можно. как объеденить в одну?

Что объеденить в одну?
...
Рейтинг: 0 / 0
Сложный запрос
    #33567757
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а незя как нить условие поставить. типа если есть строка в табле2 тогда вычесть, иначе не вычетать?
...
Рейтинг: 0 / 0
Сложный запрос
    #33567777
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMed
Что объеденить в одну?

я так понимаю этот запрос выберет все записи из таблицы2 которые не упоминаются в таблице1?
...
Рейтинг: 0 / 0
Сложный запрос
    #33567804
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот запрос выберет записи из таблицы 1 у которых Quant>0 и идентификаторых которых отсутствуют в таблице 2. Т.е выполнится вот это:
авторДАно:
Table1 - Поля: ID, Quant
Table2 - Поля: ID, Quant

Требуется:
1)Выбрать все значения из Table1, где Quant > 0 (не проблема)
Table3:
Select
Id As Id,
Quant As Quant
From
Table1
Where
Quant > 0

2)Выбрать все значения из получившейся Table3. в итоге должна получится Table4 = Table3 за исключением строк в которых Table2.ID = Table3.ID.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567827
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMedЭтот запрос выберет записи из таблицы 1 у которых Quant>0 и идентификаторых которых отсутствуют в таблице 2. Т.е выполнится вот это:

там продолжение: "в этих строках Quant = Table3.Quant - Table2.Quant "
в этом продолжении вся загвоздка
...
Рейтинг: 0 / 0
Сложный запрос
    #33567840
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firerer AleksMedЭтот запрос выберет записи из таблицы 1 у которых Quant>0 и идентификаторых которых отсутствуют в таблице 2. Т.е выполнится вот это:

там продолжение: "в этих строках Quant = Table3.Quant - Table2.Quant "
в этом продолжении вся загвоздка

Этих идентификаторов нету в Table2. Что ты хочешь вычитать? :)
Или неправильно описана задача.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567864
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
firerer
там продолжение: "в этих строках Quant = Table3.Quant - Table2.Quant "
в этом продолжении вся загвоздка

ТОесть конешно Тable1.Quant - Table2.Quant
...
Рейтинг: 0 / 0
Сложный запрос
    #33567916
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если связь между таблицами Table1 и Table2 один-к-одному или много-к-одному, то можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT ;
	Table1.ID, ;
	Table1.Quant - NVL(Table2.Quant, 0 ) as Quant ;
FROM Table1 ;
LEFT JOIN Table2 ON Table1.ID = Table2.ID ;
WHERE Table1.Quant >  0 

Если одной записи из таблицы Table1 может соответствовать несколько записей из таблицы Table2, то такая схема не годится. Но в этом случае следует уточнить, какую сумму вычитать из суммы каждой записи Table1.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567944
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЕсли связь между таблицами Table1 и Table2 один-к-одному или много-к-одному

связь следующая. для каждого Table1.ID может существовать только одна запись с Table2.ID = Table1.ID.
но ее может и не быть вовсе. вот в чем загвоздка.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567958
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMed firerer AleksMedЭтот запрос выберет записи из таблицы 1 у которых Quant>0 и идентификаторых которых отсутствуют в таблице 2. Т.е выполнится вот это:

там продолжение: "в этих строках Quant = Table3.Quant - Table2.Quant "
в этом продолжении вся загвоздка

Этих идентификаторов нету в Table2. Что ты хочешь вычитать? :)
Или неправильно описана задача.

что значит нету?????
написано же если Table1.ID = Table2.ID Тогда Table3.Quant = Table1.Quant - Table2.Quant.
Если в Table2 Нет вообще строки с ID = Table1.ID Тогда Table3.Quant = Table1.Quant

все так и написал.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567966
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firerer
2)Выбрать все значения из получившейся Table3. в итоге должна получится Table4 = Table3 за исключением строк в которых Table2.ID = Table3.ID. в этих строках Quant = Table3.Quant - Table2.Quant

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

Если я правильно понял в тех строках где Table2.ID = Table3.ID нужно заменить
Quant на Table1.Quant - Table2.Quant

Select IIF(Table2.ID = Table3.ID ,T1.Quant,Table1.Quant - Table2.Quant )...
Попробуй может получится:)
...
Рейтинг: 0 / 0
Сложный запрос
    #33567971
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firerer AleksMed firerer AleksMedЭтот запрос выберет записи из таблицы 1 у которых Quant>0 и идентификаторых которых отсутствуют в таблице 2. Т.е выполнится вот это:

там продолжение: "в этих строках Quant = Table3.Quant - Table2.Quant "
в этом продолжении вся загвоздка

Этих идентификаторов нету в Table2. Что ты хочешь вычитать? :)
Или неправильно описана задача.

что значит нету?????
написано же если Table1.ID = Table2.ID Тогда Table3.Quant = Table1.Quant - Table2.Quant.
Если в Table2 Нет вообще строки с ID = Table1.ID Тогда Table3.Quant = Table1.Quant

все так и написал.
Кто понял это с первого раза, поднимите руки?
Про остальное Володя Максимов уже написАл.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567977
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 firerer чем тебя не устроило:
ВладимирМ
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT ;
	Table1.ID, ;
	Table1.Quant - NVL(Table2.Quant, 0 ) as Quant ;
FROM Table1 ;
LEFT JOIN Table2 ON Table1.ID = Table2.ID ;
WHERE Table1.Quant >  0 


а проблему надо вразумительней описывать, а то все изначально поняли совсем не то что ты имел ввиду. не хватает слов - приводи примеры.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567986
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMed
Кто понял это с первого раза, поднимите руки?
Про остальное Володя Максимов уже написАл.
звиняюсь за сумбурность. с терминологией пока проблемы.

То что написал Владимир мне бы помогло наверное если бы драйвер поддерживал функцию NVL.
...
Рейтинг: 0 / 0
Сложный запрос
    #33567991
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой драйвер? В чем таблицы?
...
Рейтинг: 0 / 0
Сложный запрос
    #33568008
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TКакой драйвер? В чем таблицы?

"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:database"

таблицы Dbf
...
Рейтинг: 0 / 0
Сложный запрос
    #33568013
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подключаюсь через ODBC
...
Рейтинг: 0 / 0
Сложный запрос
    #33568021
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firererподключаюсь через ODBC
Из чего подключаешься?
...
Рейтинг: 0 / 0
Сложный запрос
    #33568026
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMed
Из чего подключаешься?
разве это принципиально?
...
Рейтинг: 0 / 0
Сложный запрос
    #33568047
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На крайняк при обработке - если Quant2 = NULL то брать Quant1 иначе Quant2
Код: plaintext
1.
2.
3.
4.
5.
SELECT ;
	Table1.ID, Table1.Quant as Quant1;
	Table1.Quant - Table2.Quant as Quant2;
FROM Table1 ;
LEFT JOIN Table2 ON Table1.ID = Table2.ID ;
WHERE Table1.Quant >  0 
...
Рейтинг: 0 / 0
Сложный запрос
    #33568050
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция NVL() эквивалентна такой конструкции

Код: plaintext
IIF(IsNull(Table2.Quant), 0 ,Table2.Quant)

Так что можешь попробовать написать так:

Код: plaintext
1.
2.
...
Table1.Quant - IIF(IsNull(Table2.Quant), 0 ,Table2.Quant) as Quant ;
...
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сложный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]