20.10.2010, 16:16 | #1 |
Участник
|
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 |
Участник
|
Я бы такой запрос лучше бы собрал в AOT и потом только значения свои подставлял бы.
|
|
20.10.2010, 16:46 | #3 |
Ищущий знания...
|
ИМХО, странная архитектура данных попытаться засунуть и шапку и строки в одну таблицу.
Даже не могу придумать как можно извернуться с запросом на форме с Вашими условиями Я бы сделал через временные таблицы. Собрал бы нужные "главные" (шапки) записи в одну, нужные "второстепенные" (строки) в другую, а потом уже вывел эти таблицы на форму.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.10.2010, 16:57 | #4 |
северный Будда
|
Судя по описанию, надо отфильтровать именно второстепенные записи, попадающие в интервал. В это случае фильтроваться по шапке вообще не надо. Выборку надо делать от второстепенных записей. Я такое даже уже и видел как-то. Сейчас покопаюсь в архивах...
почему обязательно шапка и строки? может быть это договора и допсоглашения к ним.
__________________
С уважением, Вячеслав Последний раз редактировалось pitersky; 20.10.2010 в 17:00. |
|
20.10.2010, 17:00 | #5 |
Ищущий знания...
|
я образно выражался, думаю доп соглашения пихать в таблицу с договорами тоже не гуд. лучше сделать отдельным справочником, привязанным к договорам. Так проще и понятней и в духе аксапты.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
20.10.2010, 17:08 | #6 |
Участник
|
Ну такой запрос возможен к примеру при выяснении кто работал в данном подразделении на заданную то дату через RPayHistory. Иначе ни как... Сам в своё время ломал голову...
|
|
20.10.2010, 17:09 | #7 |
Участник
|
Цитата:
Имхо, без UNION не обойтись |
|
20.10.2010, 17:15 | #8 |
MCTS
|
Как вариант - добавить в таблицу поле Максимальная дата второстепенной записи. Заполнять его для главных записей - указывать в нем максимальную из (дат подчиненных записей, даты самой этой главной записи). И можно писать простой запрос по этому полю.
__________________
I could tell you, but then I would have to bill you. |
|
20.10.2010, 17:25 | #9 |
Участник
|
|
|
20.10.2010, 17:25 | #10 |
Участник
|
Я так и сделала (минимальная и максим дата), но ведь хочется, чтобы красиво было.
|
|
20.10.2010, 19:22 | #11 |
Участник
|
Ещё немного подумал в том же направлении. Можно обойтись и без придумывания фиктивной строки. Всё намного проще:
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 |
Участник
|
Пасибо всем за участие.
Цитата:
Ещё немного подумал в том же направлении. Можно обойтись и без придумывания фиктивной строки. Всё намного проще
Прикольно только выглядит при этом пользовательский фильтр. Он отмечает туже самую таблицу как 2 источник и ставит на нужный критерий ограничения. Я бы сразу и не додумалась, что это заменяется фразой существует. Последний раз редактировалось Arahnid; 21.10.2010 в 01:00. |
|