powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сложный запрос
25 сообщений из 55, страница 2 из 3
Сложный запрос
    #33568072
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIMM@
Если я правильно понял в тех строках где Table2.ID = Table3.ID нужно заменить
Quant на Table1.Quant - Table2.Quant

Select IIF(Table2.ID = Table3.ID ,T1.Quant,Table1.Quant - Table2.Quant )...
Попробуй может получится:)

Граждане, а почему так нельзя сделать. Или я чего не так понял?
...
Рейтинг: 0 / 0
Сложный запрос
    #33568085
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 


вырезает из результата те строки которых нет в table2.


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

А уже на клиенте вычитай из Quant1 те значения Quant2, которые отличны от NULL.
...
Рейтинг: 0 / 0
Сложный запрос
    #33568156
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
firererвопщем краткая иллюстрация того чо надо
(с этого начать стоило бы наверно)
Ну так это обычный INNER JOIN
SELECT ;
Table1.ID, ;
Table1.Quant-Table2.Quant as Quant1 ;
FROM Table1 ;
INNER JOIN Table2 ON Table1.ID = Table2.ID ;
WHERE Table1.Quant > 0
...
Рейтинг: 0 / 0
Сложный запрос
    #33568172
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМТогда делай вообще без вычислений
А уже на клиенте вычитай из Quant1 те значения Quant2, которые отличны от NULL.

после получения результатов я уже с ними ничего сделать не могу. результат запроса является поставщиком данных для табличного поля. там все уже должно быть сформировано в том виде в котором должно быть показано.
...
Рейтинг: 0 / 0
Сложный запрос
    #33568217
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0
...
Рейтинг: 0 / 0
Сложный запрос
    #33568226
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без проверки на NULL не обойтись
1. Сделай COM-объект на фоксе и юзай его из 1С
2. Попробуй NVL(Table1.Quant - Table2.Quant, 0) заменить на
- isnull(Table1.Quant - Table2.Quant, 0)
- iif(isnull(Table2.Quant), Table1.Quant, Table1.Quant - Table2.Quant)
3. Попробуй фоксовый ODBC-драйвер.
...
Рейтинг: 0 / 0
Сложный запрос
    #33568259
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так попробуй
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT Table1.ID, ;
	Table1.Quant - NVL(Table2.Quant, 0 ) as Quant ;
FROM Table1 ;
INNER JOIN Table2 ON Table1.ID = Table2.ID ;
WHERE Table1.Quant >  0 ;
union all (SELECT Table1.ID, ;
	Table1.Quant;
FROM Table1;
WHERE Table1.ID not in (select ID from Table2);
)
...
Рейтинг: 0 / 0
Сложный запрос
    #33568262
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка
Код: plaintext
1.
2.
3.
SELECT Table1.ID, ;
	Table1.Quant - Table2.Quant as Quant ;
...
...
Рейтинг: 0 / 0
Сложный запрос
    #33568323
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DIMM@Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0

Завис наглухо.
...
Рейтинг: 0 / 0
Сложный запрос
    #33568422
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вопщем получился воттакой запрос:
Select
Orders.NomID As NomID,
Orders.Name As Name,
Orders.Art As Art,
Orders.QuantOrder As QuantOrder,
Rests.QuantRest As QuantRest,
IIf(Orders.NomID = Rests.NomID, Orders.QuantOrder - Rests.QuantRest, Orders.QuantOrder) As Necessary
From
(

Select
Nom.ID As NomID,
Nom.Descr As Name,
Nom.sp175 As Art,
Reg.sp479 As QuantOrder
From
sc60 As Nom
, RG480 As Reg
Where
(Reg.sp478 = Nom.ID)
AND
(Reg.Period = {d '2006-02-01'})
AND
(Reg.sp479 > 0)

) As Orders
,
(

Select
Reg.sp99 As NomID,
Sum(Reg.sp101) As QuantRest
From
RG98 As Reg
Where
(Reg.Period = {d '2006-02-01'})
Group By Reg.sp99

) As Rests
Where
(Rests.NomID = Orders.NomID)
AND
(Orders.QuantOrder > Rests.QuantRest)

Всем спасибо
Отдельно спасибо Dimm@ за конструкцию IIf()
...
Рейтинг: 0 / 0
Сложный запрос
    #33568450
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Незачто. Я тут по твоему примеру таблицы создал, и прогнал, как я советывал. Оно конечно не повисло и выборку правильно сделало, только сдублировало все Таbl1.ID по три раза. Подумал и понял что сглупил(звиняй что на ложный путь поставил, счас сижу думаю как тут завернуть что б правильно получалось(для себя)). Счастливо...
...
Рейтинг: 0 / 0
Сложный запрос
    #33568470
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что добавочка нужна:
Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0 AND Table1.ID = Table2.ID
...
Рейтинг: 0 / 0
Сложный запрос
    #33568481
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMedПотому что добавочка нужна:
Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0 AND Table1.ID = Table2.ID

у меня так и есть:
firerer
Where
(Rests.NomID = Orders.NomID)
AND
(Orders.QuantOrder > Rests.QuantRest)
...
Рейтинг: 0 / 0
Сложный запрос
    #33568489
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMedПотому что добавочка нужна:
Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0 AND Table1.ID = Table2.ID

Возможно мы по разному поняли условие. Здесь надо брать все tabl1.Id, а по вашему не равные tabl2.Id исключаться
...
Рейтинг: 0 / 0
Сложный запрос
    #33568507
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIMM@ AleksMedПотому что добавочка нужна:
Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0 AND Table1.ID = Table2.ID

Возможно мы по разному поняли условие. Здесь надо брать все tabl1.Id, а по вашему не равные tabl2.Id исключаться

Точно. Извиняюсь. :)
И в посте выше не INNER JOIN, а LEFT JOIN
...
Рейтинг: 0 / 0
Сложный запрос
    #33568527
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DIMM@
Возможно мы по разному поняли условие. Здесь надо брать все tabl1.Id, а по вашему не равные tabl2.Id исключаться
точно. исключаюца.
...
Рейтинг: 0 / 0
Сложный запрос
    #33568528
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleksMed DIMM@ AleksMedПотому что добавочка нужна:
Select Table1.ID,;
IIF(Table1.ID = Table2.ID ,Table1.Quant - Table2.Quant,Table1.Quant );
From Table1,table2;
where Table1.Quant>0 AND Table1.ID = Table2.ID

Возможно мы по разному поняли условие. Здесь надо брать все tabl1.Id, а по вашему не равные tabl2.Id исключаться

Точно. Извиняюсь. :)
И в посте выше не INNER JOIN, а LEFT JOIN

А вы не могли бы посоветовать, как модернизировать мой запрос, что бы он правильно работал(не усложняя при этом сильно его структуру, и без JOIN)?
...
Рейтинг: 0 / 0
Сложный запрос
    #33568551
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без JOIN наверное не получится :)
А посему скрести мой последния запрос, поменяв INNER JOIN на LEFT JOIN, и добавив свой IIF() для разруливания NULL
...
Рейтинг: 0 / 0
Сложный запрос
    #33568563
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
firerer DIMM@
Возможно мы по разному поняли условие. Здесь надо брать все tabl1.Id, а по вашему не равные tabl2.Id исключаться
точно. исключаюца.

но сдесь чота предумывать надо. потомучто иначе запрос создает все возможные комбинации строк двух таблиц. а у мене в каждой по 5 тыщ их. вот комп и виснет
...
Рейтинг: 0 / 0
Сложный запрос
    #33568582
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
уже петнацать менут щетает.
...
Рейтинг: 0 / 0
Сложный запрос
    #33568597
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересные результаты. вот что я получаю при моём запросе(из табл. примера Firevare):
id__Quanum
12 - -1
12 - 1
12 - 1
13 -5
13 -5
13 -5
11 -4
11 -4
11 -1
Потом добавляю GROUP BY Table1.id:
id__Quanum
11 -1
12 -1
13 -5
Как видно для id=12 было значение -1, а в Group стало 1, а для id=11 почему то 1 и 1
...
Рейтинг: 0 / 0
Сложный запрос
    #33568619
firerer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DIMM@Интересные результаты. вот что я получаю при моём запросе(из табл. примера Firevare):
id__Quanum
12 - -1
12 - 1
12 - 1
13 -5
13 -5
13 -5
11 -4
11 -4
11 -1
Потом добавляю GROUP BY Table1.id:
id__Quanum
11 -1
12 -1
13 -5
Как видно для id=12 было значение -1, а в Group стало 1, а для id=11 почему то 1 и 1

предпологаю шо берецо последнее значение для группировки. функций то нету
...
Рейтинг: 0 / 0
Сложный запрос
    #33568726
Фотография DIMM@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже что IIF придется выкидывать:)(знаю что не смешно) Как там у тебя продвигается? Возможно имеет смысл послушать старших и сделать две таблицы?
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 2 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сложный запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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