22.10.2013, 10:30 | #1 |
Участник
|
Преобразование вложенного SQL-запроса в query
Доброе утро, уважаемое сообщество! Третий день бьюсь над некоторой проблемой, никак не могу придти к конкретному решению.
Есть sql-запрос X++: --query 1 select * from ( select list.itemid ,list.internalsp ,jour.SPDATE ,jour.SPCLOSED as jourClosed ,list.SPCLOSED as listClosed ,sum(list.spqty) as SumSpQty ,jour.EMPLID ,jour.IDSP from VENDSPLISTJOUR as jour join VENDSPLISTTRANS as list on jour.INTERNALSP = list.INTERNALSP group by list.ITEMID ,list.INTERNALSP ,jour.SPDATE ,jour.SPCLOSED ,list.SPCLOSED ,jour.EMPLID ,jour.IDSP ) as request1 join ( --query 2 select invoice.itemid ,invoice.internalsp ,SUM(invoice.qty) as sumQty ,invoice.PURCHID from VENDINVOICETRANS as invoice join INVENTTABLEMODULE as invent on invoice.ITEMID = invent.ITEMID and invent.MODULETYPE = 1 group by invoice.itemid ,invoice.internalsp ,invoice.PURCHID ) as resuest2 on request1.INTERNALSP = resuest2.INTERNALSP and request1.ITEMID = resuest2.ITEMID where request1.jourClosed = 0 Нужно соединить именно в такой последовательности(jour+list) + (invoice + invent) и на выходе получить результат, с которым потом уже производить определённые действия. На данный момент я сделал метод, который собирает нужные мне поле, ищет суммы и группирует, но из-за связей много-ко-много суммы множатся, чего быть не должно, а запрос sql корректно ищет суммы, поэтому и хочу его преобразовать в Query. Буду благодарен за любую помощь, даже пинок в нужную сторону! |
|
22.10.2013, 11:08 | #2 |
Участник
|
Сделайте 2 View, а по ним создайте Query.
Если есть возможность, уберите группировку по jourClosed и listClosed. Я так понимаю, это всего-лишь чекбоксы (т,е. возможны только значения No/Yes)?
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: user_ax (1). |
22.10.2013, 11:10 | #3 |
Участник
|
Цитата:
С View раньше плотно не работаел, пытался этот запрос реализовать через 1 view - не получалось. Да, это чекбоксы, я их добавил в группировку просто для просмотра текущих значений, они не важны для запроса. Сейчас попробую и отпишусь. |
|
22.10.2013, 12:16 | #4 |
Участник
|
Если чекбоксы не нужны, можно сделать так:
X++: select ItemId, InternalSP, sum(SPQty) from VendSPListTrans group by ItemId, InternalSP join PurchId, sum(Qty) from VendInvoiceTrans group by PurchId where VendInvoiceTrans.InternalSP == VendSPListTrans.InternalSP && VendInvoiceTrans.ItemId == VendSPListTrans.ItemId join SPDate, EmplId, IdSP from VendSPListJour group by SPDate, EmplId, IdSP where VendSPListJour.SPClosed == NoYes::No exists join InventTableModule where InventTableModule.ItemId == VendSPListTrans.ItemId && InventTableModule.ModuleType == 1;
__________________
// no comments |
|
22.10.2013, 12:32 | #5 |
Участник
|
Увы, нужны, так как они и будут модифицироваться. Я сделал 2 View, создал в АОТ Query, добавил 2 view в кач-ве источников данных запроса, вынес во view те поля, что мне нужны, добавил эти поля в группировки и агрегирующие ф-ции, но теперь не понимаю, как мне их объединить по связям эти 2 источника данных Пробовал в цикле получить данные с этого квери - ругается, что неправильный тип аргументов ф-ции X++: VendSpListJour vendsp; Query _query; QueryRun _queryRun; _query = new Query(querystr(SpClose)); while (_queryRun.next()) { vendsp = _queryRun.get(tablenum(VendSpListJour)); //do something Что-то вроде viewnum ? Последний раз редактировалось user_ax; 22.10.2013 в 12:48. |
|
22.10.2013, 12:58 | #6 |
Участник
|
В query у вложенного датасурса узел relation
Не, всё тот же tablenum, только в качестве аргумента - имя view. И переменная в которую возврвщвется результат тоже типа view должна быть Последний раз редактировалось S.Kuskov; 22.10.2013 в 13:00. |
|
|
За это сообщение автора поблагодарили: user_ax (1). |
22.10.2013, 13:31 | #7 |
Участник
|
Я что-то не пойму, вы делаете SELECT с группировкой и еще хотите обновлять записи?
__________________
// no comments |
|
22.10.2013, 13:41 | #8 |
Участник
|
Цитата:
А, вот оно что, сейчас попробую, спасибо. Вначале делаю селект, а потом на основании выбранных записей делаю update в другую табличную переменную и её обновляю. |
|
22.10.2013, 14:34 | #9 |
Участник
|
Множатся записи всё равно, блин Видимо нужно по-другому как-то.
|
|
22.10.2013, 17:22 | #10 |
Участник
|
Решил проблему
Всем спасибо(+1)! |
|
Теги |
query, вложенный запрос |
|
|