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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.10.2010, 16:16   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Ax3 Как на DS написать такой запрос
Суть есть форма, которая разделена на 2 части: верхняя часть - главные, нижняя - второстепенные.
Обе части ссылаются на таблицу t, but
в первой части стоят записи с флажком Главное, а во второй Второстепенное.
Второстепенные подчиненны главным и связаны по полю GC.
Создавая строки в таблице t записывается дата создания. Задача: найти все записи и основные, и второстепенные за определенный период по дате создания.
Проблема в том, что Второстепенные могут быть созданы позже даты создания Главной. В этом случае надо вывести Второстепенные, которые попадают в заданный для фильтра период, и в верхней части Главные, которым подчинены второстепенные и которые могут и не попадать в заданный период. При этом сами Главные, попадающие в период тоже должны выводиться.

Примерно такой запрос, но как его реализовать на DS в запросе не знаю.

X++:
SELECT * FROM Table1 as t1
WHERE (( = )) AND ((DateCreate>=19.10.2010 AND DateCreate<=20.10.2010)) 
Or
SELECT * FROM Table1 as t2
WHERE (( = )) AND ((t2.DateCreate <19.10.2010 AND t2.DateCreate >20.10.2010)) 
EXISTS JOIN * FROM Table1 as t3
WHERE t3.GC = t2.GC AND ((t3. = )) AND ((t3.DateCreate>=19.10.2010 AND t3.DateCreate<=20.10.2010))
Старый 20.10.2010, 16:33   #2  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Я бы такой запрос лучше бы собрал в AOT и потом только значения свои подставлял бы.
Старый 20.10.2010, 16:46   #3  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
ИМХО, странная архитектура данных попытаться засунуть и шапку и строки в одну таблицу.
Даже не могу придумать как можно извернуться с запросом на форме с Вашими условиями
Я бы сделал через временные таблицы. Собрал бы нужные "главные" (шапки) записи в одну, нужные "второстепенные" (строки) в другую, а потом уже вывел эти таблицы на форму.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 20.10.2010, 16:57   #4  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Судя по описанию, надо отфильтровать именно второстепенные записи, попадающие в интервал. В это случае фильтроваться по шапке вообще не надо. Выборку надо делать от второстепенных записей. Я такое даже уже и видел как-то. Сейчас покопаюсь в архивах...
Цитата:
Сообщение от lev Посмотреть сообщение
странная архитектура данных попытаться засунуть и шапку и строки в одну таблицу
почему обязательно шапка и строки? может быть это договора и допсоглашения к ним.
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 20.10.2010 в 17:00.
Старый 20.10.2010, 17:00   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от pitersky Посмотреть сообщение
почему обязательно шапка и строки? может быть это договора и допсоглашения к ним.
я образно выражался, думаю доп соглашения пихать в таблицу с договорами тоже не гуд. лучше сделать отдельным справочником, привязанным к договорам. Так проще и понятней и в духе аксапты.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 20.10.2010, 17:08   #6  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Ну такой запрос возможен к примеру при выяснении кто работал в данном подразделении на заданную то дату через RPayHistory. Иначе ни как... Сам в своё время ломал голову...
Старый 20.10.2010, 17:09   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от pitersky Посмотреть сообщение
Судя по описанию, надо отфильтровать именно второстепенные записи, попадающие в интервал. В это случае фильтроваться по шапке вообще не надо. Выборку надо делать от второстепенных записей.
В таком случае вы рискуете потерять те главные, которые совсем без второстепенных.

Имхо, без UNION не обойтись
Старый 20.10.2010, 17:15   #8  
twilight is offline
twilight
MCTS
MCBMSS
 
881 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Как вариант - добавить в таблицу поле Максимальная дата второстепенной записи. Заполнять его для главных записей - указывать в нем максимальную из (дат подчиненных записей, даты самой этой главной записи). И можно писать простой запрос по этому полю.
__________________
I could tell you, but then I would have to bill you.
Старый 20.10.2010, 17:25   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от twilight Посмотреть сообщение
Как вариант - добавить в таблицу поле Максимальная дата второстепенной записи.
А с чего вы взяли что выборка должна строится по максимальнай дате?
Старый 20.10.2010, 17:25   #10  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Я так и сделала (минимальная и максим дата), но ведь хочется, чтобы красиво было.
Старый 20.10.2010, 19:22   #11  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ещё немного подумал в том же направлении. Можно обойтись и без придумывания фиктивной строки. Всё намного проще:
X++:
select t1
where
    t1. ==  &&
exists join t2
where
    t2.CG == t1.CG && 
    t2.DateCreate <19.10.2010 && t2.DateCreate >20.10.2010
Старый 21.10.2010, 00:33   #12  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Пасибо всем за участие.

Цитата:
Ещё немного подумал в том же направлении. Можно обойтись и без придумывания фиктивной строки. Всё намного проще
Да - проще, и я к этому пришла (жаль сайт глючил и я потратила свое время, хотя вы уже дали ответ раньше, просто не было возможности его увидеть - очень обидно!).

Прикольно только выглядит при этом пользовательский фильтр.
Он отмечает туже самую таблицу как 2 источник и ставит на нужный критерий ограничения. Я бы сразу и не додумалась, что это заменяется фразой существует.

Последний раз редактировалось Arahnid; 21.10.2010 в 01:00.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как должен работать такой запрос kashperuk DAX: Программирование 7 21.02.2010 15:12
Помогите такой вопрос написать в Аксапте Protey DAX: Программирование 13 25.09.2006 13:04
Подскажите как реализовать такой запрос в Axapte velk DAX: Программирование 12 04.04.2006 21:55
Помогите написать запрос Кандидат DAX: Программирование 7 17.10.2005 14:44
Можно ли в аксапте реализовать такой SQL запрос: Sergey_1972 DAX: Программирование 14 18.03.2004 16:33
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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