29.09.2003, 14:42 | #1 |
Участник
|
UNION
В Оракле был (нехорошо как-то в прошедшем времени, он вроде не умер ещё) такой оператор - UNION. Хотелось бы узнать есть ли в Аксапте какие-нибудь аналоги ему. Может можно два(или больше) набора данных затащить в один query? Как быть если понадобится два набора данных (с одинаковым набором полей конечно) отобразить в одном лукапе?
__________________
Дмитрий |
|
29.09.2003, 15:32 | #2 |
Участник
|
join
См. документацию по этому ключевому слову. А также форму tutorial_Form_Join |
|
29.09.2003, 15:45 | #3 |
Administrator
|
По-моему, это все-таки вопрос про Map.
Если я прав, то читайте дальше. Есть в Аксапте такой объект - Map. Живут они в Data Dictionary. С помощью Map'ов можно сделать так, что данные из нескольких таблиц, будут представлены в одной (вернее выглядеть это будет так). Для всех остальных объектов Axapta Map'ы выглядят, как обычные таблицы. Резюме. Все зависит от того, как вы хотите объединить свои данные. Если хотите две таблицы рядом (одна слева, другая справа), тогда вам Join нужен. Если друг за другом (одна сначала, другая в конце), тогда Map.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.09.2003, 15:49 | #4 |
Участник
|
Цитата:
А также форму tutorial_Form_Join
__________________
Дмитрий |
|
29.09.2003, 16:05 | #5 |
Administrator
|
Цитата:
Изначально опубликовано Damn
Просто записи, возвращаемые одним, добавляются к записям второго. Единственное требование - одинаковое кол-во столбцов и одинаковые типы этих столбцов.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.09.2003, 16:13 | #6 |
Участник
|
Поглядел я Map'ы. Интересные создания . Таблицы они соединяют. А запросы? Query то есть. И ведь эти запросы мне нужно соединить в лукапе. Программно. Да там ещё параметры будут.
__________________
Дмитрий |
|
29.09.2003, 16:27 | #7 |
Administrator
|
Будем мыслить логически.
1. Map объединит только Table'ы. 2. Query в результате дает DataSource в результате. 3. Из 1 и 2 следует, что Query Map'ом мы не получим. А если пойти наоборот? Какая задача, если не секрет? И, кстати, версия Axapta (в третьей еще, кажется, кое-какие пряники есть).
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.09.2003, 16:28 | #8 |
Участник
|
Цитата:
Изначально опубликовано Damn
Возможно ты не работал с Ораклом .. или я неправильно сформулировал вопрос. Но UNION служит для соединения набора записей, возвращаемых двумя SQL-запросами. Также применяются UNION ALL, MINUS, INTERSECT (извиняюсь за случайное рекламирование неаксаптовских операторов). Соединяемые запросы никаким образом не связываются друг с другом. Просто записи, возвращаемые одним, добавляются к записям второго. Единственное требование - одинаковое кол-во столбцов и одинаковые типы этих столбцов. Это оно? Или я не так понял? С Ораклом я действительно плотно не работал. Про МАПы. МАП лучше всего воспринимать как interface для классов. В отличие от interface МАП умеет работать с переименованными полями, переменными. А в остальном - типичный интерфейс. МАП ни в коем случае не является запросом и не имеет физической реализации. |
|
29.09.2003, 16:51 | #9 |
Administrator
|
Цитата:
Изначально опубликовано mazzy
См. руководство разработчика. ключевая фраза "Sequencing of retrieved records"
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.09.2003, 17:18 | #10 |
Участник
|
Ладно , закидали вы меня ответами
"Упорядочивание возвращаемых записей" я поглядел. На "Multiple embedded data sources" внимание обратил. Привожу иллюстрацию: [IMG][/IMG] не отображал никогда иллюстрации, может она и не отобразится сейчас. Дочерние датасоурсы привязаны к главному DataSource A посредством ExistJoin. Так вот мне надо чтобы между DataSource B и DataSource C было логическое ИЛИ .. то есть либо та либо другая связь должна присутствовать (хотя бы одна). Как между Link'ами делать ИЛИ я не знаю, поэтому и подумал насчёт UNION. Хотя это оказалось ещё сложнее.
__________________
Дмитрий |
|
29.09.2003, 17:56 | #11 |
Участник
|
Возможно я сильно туплю... Но не понимаю в чем проблема.
Сделайте запрос по: LedgerJournalTrans - LedgerTable - CustTable - VendTable введите строчки со счетами различного типа и посмотрите на результаты запроса. или воспользуйтесь программированием, как в печати журнала. В форме, видимо, придется прграммировать. См. форму HRMCompetanceSearch главное меню \ Управление персоналом \ Периодические операции \ подбор персонала |
|
30.09.2003, 09:21 | #12 |
Участник
|
Если я правильно понял, то Damn требуется получить результирующий набор азписей, выбранных из двух (или более таблиц). Map тут не поможет. Единственное средство, которое приходит на ум - временные таблицы. Создаешь временную таблицу, определяешь ее поля, потом создаешь обработчик, который ее заполняет сначала записями из одной таблицы, потом из другой. В итоге временная таблица содержит то, что надо. По-моему, это единственный способ реализовать функциональность оператора UNION (кстати, в MS SQL Server он тоже имеется).
|
|
30.09.2003, 10:23 | #13 |
Участник
|
Так, хорошо.
ИЛИ между линками разобрались как делается. Путём добавления поля-флажка. Но приведу небольшой примерчик: PHP код:
Цитата:
Единственное средство, которое приходит на ум - временные таблицы.
__________________
Дмитрий |
|
12.04.2004, 10:41 | #14 |
Участник
|
Цитата:
В форме, видимо, придется прграммировать.
См. форму HRMCompetanceSearch главное меню \ Управление персоналом \ Периодические операции \ подбор персонала Цитата:
вот почему если к главному датасоурсу добавить только один со связью InnerJoin , то всё нормально - отобразятся только Спецификации(ItemType::BOM). А если убрать заремаривание и добавить второй, то отобразятся все записи. Как будто нельзя добавлять два дочерних датасоурса со связями InnerJoin. Или может в них ещё какие свойства надо заполнить.
__________________
Являться частью базы знаний, дабы не изобретать велосипед Делать больше, чем говорить |
|
12.04.2004, 16:33 | #15 |
Модератор
|
А если проще?
PHP код:
|
|
13.04.2004, 11:28 | #16 |
Участник
|
Хорошо, а если надо сделать так:
К таблице InventTable подсоединяется таблица B, в которой должно быть по две записи на каждую в InventTable. Каким образом сделать так, чтобы при отсутствии записей в таблице B, в гриде отобразились бы по две InventTable с пустыми "заготовками", относящимися к B?
__________________
Являться частью базы знаний, дабы не изобретать велосипед Делать больше, чем говорить |
|
13.04.2004, 18:15 | #17 |
Юзовские
|
Цитата:
вот почему если к главному датасоурсу добавить только один со связью InnerJoin , то всё нормально - отобразятся только Спецификации(ItemType::BOM). А если убрать заремаривание и добавить второй, то отобразятся все записи. Как будто нельзя добавлять два дочерних датасоурса со связями InnerJoin. Или может в них ещё какие свойства надо заполнить.
И еще, мне кажеться что вам, Damn, нужно почитать о расширенных возможностях query. (Developers Handbook поиск по Advanced query range value expressions) Цитата:
К таблице InventTable подсоединяется таблица B, в которой должно быть по две записи на каждую в InventTable. Каким образом сделать так, чтобы при отсутствии записей в таблице B, в гриде отобразились бы по две InventTable с пустыми "заготовками", относящимися к B?
|
|
14.04.2004, 16:51 | #18 |
Участник
|
2 metal:
Читаете невнимательно: Цитата:
К таблице InventTable подсоединяется таблица B, в которой должно быть по две записи на каждую в InventTable. Каким образом сделать так, чтобы при отсутствии записей в таблице B, в гриде отобразились бы по две InventTable с пустыми "заготовками", относящимися к B?
__________________
Являться частью базы знаний, дабы не изобретать велосипед Делать больше, чем говорить |
|
14.04.2004, 18:42 | #19 |
Юзовские
|
Цитата:
Читаете невнимательно:
В одном гриде это можно сделать, используя временную таблицу. А если не в гриде, то использовать два датасоурса на одной таблице. Как в номенклатурнике на закладке Цена\Скидка. |
|