AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2013, 10:30   #1  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Преобразование вложенного 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
Нужно преобразовать его в Query().

Нужно соединить именно в такой последовательности(jour+list) + (invoice + invent) и на выходе получить результат, с которым потом уже производить определённые действия.
На данный момент я сделал метод, который собирает нужные мне поле, ищет суммы и группирует, но из-за связей много-ко-много суммы множатся, чего быть не должно, а запрос sql корректно ищет суммы, поэтому и хочу его преобразовать в Query.
Буду благодарен за любую помощь, даже пинок в нужную сторону!
Старый 22.10.2013, 11:08   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Сделайте 2 View, а по ним создайте Query.
Если есть возможность, уберите группировку по jourClosed и listClosed. Я так понимаю, это всего-лишь чекбоксы (т,е. возможны только значения No/Yes)?
__________________
// no comments
За это сообщение автора поблагодарили: user_ax (1).
Старый 22.10.2013, 11:10   #3  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от dech Посмотреть сообщение
Сделайте 2 View, а по ним создайте Query.
Если есть возможность, уберите группировку по jourClosed и listClosed. Я так понимаю, это всего-лишь чекбоксы (т,е. возможны только значения No/Yes)?
Спасибо за ответ!
С View раньше плотно не работаел, пытался этот запрос реализовать через 1 view - не получалось.
Да, это чекбоксы, я их добавил в группировку просто для просмотра текущих значений, они не важны для запроса.

Сейчас попробую и отпишусь.
Старый 22.10.2013, 12:16   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Если чекбоксы не нужны, можно сделать так:
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  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от dech Посмотреть сообщение
Если чекбоксы не нужны, можно сделать так:

Увы, нужны, так как они и будут модифицироваться.

Я сделал 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
что в принципе логично, так как нужно ведь view получать, а не таблицу. А как обратиться к ней?
Что-то вроде viewnum ?

Последний раз редактировалось user_ax; 22.10.2013 в 12:48.
Старый 22.10.2013, 12:58   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от user_ax Посмотреть сообщение
не понимаю, как мне их объединить по связям эти 2 источника данных
В query у вложенного датасурса узел relation

Цитата:
Сообщение от user_ax Посмотреть сообщение
нужно ведь view получать, а не таблицу. А как обратиться к ней?
Что-то вроде viewnum ?
Не, всё тот же tablenum, только в качестве аргумента - имя view. И переменная в которую возврвщвется результат тоже типа view должна быть

Последний раз редактировалось S.Kuskov; 22.10.2013 в 13:00.
За это сообщение автора поблагодарили: user_ax (1).
Старый 22.10.2013, 13:31   #7  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от user_ax Посмотреть сообщение
Увы, нужны, так как они и будут модифицироваться.
Я что-то не пойму, вы делаете SELECT с группировкой и еще хотите обновлять записи?
__________________
// no comments
Старый 22.10.2013, 13:41   #8  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
В query у вложенного датасурса узел relation


Не, всё тот же tablenum, только в качестве аргумента - имя view. И переменная в которую возврвщвется результат тоже типа view должна быть
Я вначале сделал их на одном уровне, а не вложенными, поэтому узла и не было, сделал связи уже.

А, вот оно что, сейчас попробую, спасибо.

Цитата:
Сообщение от dech Посмотреть сообщение
Я что-то не пойму, вы делаете SELECT с группировкой и еще хотите обновлять записи?
Вначале делаю селект, а потом на основании выбранных записей делаю update в другую табличную переменную и её обновляю.
Старый 22.10.2013, 14:34   #9  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Множатся записи всё равно, блин Видимо нужно по-другому как-то.
Старый 22.10.2013, 17:22   #10  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Решил проблему
Всем спасибо(+1)!
Теги
query, вложенный запрос

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Всегда ли правильно работает queryrun().query().dataSourceCount() при присоединении пользователем таблиц в настройках стандартного запроса? Aquarius DAX: Программирование 5 26.09.2013 09:52
ax-erp: Get underlying SQL query using getSQLStatement [Dynamics AX 2012] Blog bot DAX Blogs 0 19.07.2012 18:11
Преобразование query в строку sql db DAX: Программирование 9 12.05.2012 13:22
Как реализовать Query или View на примере такого T-SQL запроса для OLAP? sao DAX: Программирование 9 07.10.2005 18:57

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:12.