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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2007, 12:16   #21  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Sada Посмотреть сообщение
Я join забыл
Не в джойне дело.
Старый 29.05.2007, 12:18   #22  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от oip Посмотреть сообщение
Не в джойне дело.
В нем тожа, просто сначала темы не понять чего автор хочит, толи через И толи через ИЛИ... Смотрите мой первый пост, там чтото похожее на правду...
Старый 29.05.2007, 12:48   #23  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
И получаем жесткий подвисон (это - про нижеприведенное сообщение )

Уж лучше тогда вариант с count

X++:
while select table1 //ItemId
group by itemId
{
    select count(RecId) from table2
    group by itemId/*, feature - это лишнее*/
    where table2.itemid == table1.itemid;
    
    if (table2.recId == #NeededAmountOfFeautres)
    {
     //save value
    }
}

Последний раз редактировалось kashperuk; 29.05.2007 в 13:11.
Старый 29.05.2007, 12:48   #24  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Сори. Последний раз фигню написал. На автобус спешил (похавать).
Есть три тиблицы как я понял. Первая номенклатуры. Вторая характеристики и третья связь характеристик с номенклатурами.
X++:
While select table1//номенклатуры
{
    While select table2//характеристики
    {
        select table3 // связь
        where table3.itemId=ItemId && table3 && 
        table3.feature=table2.id //т.е. А.В. С и т.д. по очереди
        if (table2.id = C && table3) //последней и характеристика есть
        {
         ,    
        }
        if (! table3)
        {
        //как только первой нет выходим и берём следующую номенклатуру для проверки
        break;
        }
    }
}
Хотя через одно место, в принципе если подумать можно ещё как нибудь придумать даже быстрее, только всё равно будет через то место.

Последний раз редактировалось miklenew; 29.05.2007 в 14:52.
Старый 29.05.2007, 12:58   #25  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
[QUOTE=miklenew;139595]
Есть три тиблицы как я понял. /QUOTE]

Две таблицы: Таблица товаров и таблица характеристик. Хотя это ничего не меняет.
Старый 29.05.2007, 13:08   #26  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Цитата:
Сообщение от kashperuk Посмотреть сообщение
И получаем жесткий подвисон (это - про нижеприведенное сообщение )

Уж лучше тогда вариант с count

X++:
while select table1 //ItemId
group by itemId
{
    select count(RecId) from table2
    group by itemId, feature
    where table2.itemid == table1.itemid;
    
    if (table2.recId == #NeededAmountOfFeautres)
    {
     //save value
    }
}
В твоем варианте Иван нужно использовать контейнеры. Ради справедливости следует сказать что оно и сейчас реализовано через контейнеры: сначала выбираются все конфигурации а потом накладываются в качестве фильтра на таблицу конфигураций. Это отлично работало пока некоторых конфигураций с заданными харкетиристиками не стало слишком много (в моем случае 500), в этом случае система ругается что [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near '('. Если вариантов меньше. все работает как нужно.
Не могу понять почему: есть какое то ограничение на размер запроса? (длина строки получается больше 9000 символов) или что-то другое?
Старый 29.05.2007, 13:22   #27  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от leshy Посмотреть сообщение
Две таблицы: Таблица товаров и таблица характеристик. Хотя это ничего не меняет.
А третья связь.
Старый 29.05.2007, 13:42   #28  
Yugene is offline
Yugene
Участник
 
46 / 11 (1) +
Регистрация: 02.12.2004
Адрес: Moscow
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Уж лучше тогда вариант с count
Но только не забыть наложить-таки условие на select ... from table2, иначе выберутся просто все номенклатуры, у которых два любых свойства.

leshy
Размер запроса ограничивается SQL Server'ом, как-то натыкались...
Старый 29.05.2007, 14:11   #29  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Цитата:
Сообщение от miklenew Посмотреть сообщение
А третья связь.
miklenew, связь 1:n, достаточно двух таблиц
Старый 29.05.2007, 14:33   #30  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от leshy Посмотреть сообщение
Пусть мы имеем Таблица 1
ItemId
1
2
3
Таблица 2
ItemId Feature
1 A
1 B
1 C
2 A
2 C
3 B

Мне нужно выбрать товар, который содержит харктеристики А, B и С.
Не понимаю. Вот две таблицы. 1-я номенклатур. 2-я связь. А третья таблица характеристики. Я так понимаю Feture - это id характеристики.
Старый 29.05.2007, 14:33   #31  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от Yugene Посмотреть сообщение
leshy
Размер запроса ограничивается SQL Server'ом, как-то натыкались...
AFAIK ограничение по длинне запроса в SQL Server 2000 8Kb, так что 9000 символов не выходят за сей предел. Если конечно сосчитали правильно, а не посимвольно
Старый 29.05.2007, 14:40   #32  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Цитата:
Сообщение от miklenew Посмотреть сообщение
Не понимаю. Вот две таблицы. 1-я номенклатур. 2-я связь. А третья таблица характеристики. Я так понимаю Feture - это id характеристики.
В даном случае достаточно только id характеристики. Действительно еще есть справочник характеристик, но для данного запроса в нем нет необходимости.
Старый 29.05.2007, 14:41   #33  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Цитата:
Сообщение от Lemming Посмотреть сообщение
AFAIK ограничение по длинне запроса в SQL Server 2000 8Kb, так что 9000 символов не выходят за сей предел. Если конечно сосчитали правильно, а не посимвольно
Lemming подскажите пожалуйста как мне узнать длину запроса, потому что я действительно считал посимвольно.
Старый 29.05.2007, 14:51   #34  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от leshy Посмотреть сообщение
В даном случае достаточно только id характеристики. Действительно еще есть справочник характеристик, но для данного запроса в нем нет необходимости.
А чем плохо решение в 24-м сообщение.
За это сообщение автора поблагодарили: leshy (1).
Старый 29.05.2007, 14:52   #35  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Cool
жара однако, 9000 символов это больше 8 Кб, приношу свои извенения, ашыпся. Похоже ограничение на длинну запроса, как раз и является причиной ошибки.
Старый 29.05.2007, 15:30   #36  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Цитата:
Сообщение от miklenew Посмотреть сообщение
А чем плохо решение в 24-м сообщение.
По причине приведенной в 26-м сообщении
Старый 30.05.2007, 12:39   #37  
Ed1k is offline
Ed1k
Участник
 
102 / 42 (2) +++
Регистрация: 19.07.2006
Цитата:
Сообщение от leshy Посмотреть сообщение
По причине приведенной в 26-м сообщении
Тут вероятно оптимальным вариантом будет запрос с having через Connection,
и ограничение на 26 таблиц обходится и размер запроса вроде как должен
быть меньше и с контейнерами меньше возиться )
За это сообщение автора поблагодарили: leshy (1).
Старый 30.05.2007, 12:49   #38  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,741 / 404 (17) +++++++
Регистрация: 23.03.2006
Можно еще сделать запрос с максимальным количеством джойнов, а оставшиеся условия проверить уже внутри цикла. или результат первого запроса сохранить во временную таблицу, потом сделать запрос для оставшихся условий уже с временной таблицей.
За это сообщение автора поблагодарили: leshy (1).
Старый 30.05.2007, 20:47   #39  
leshy is offline
leshy
Участник
 
118 / 11 (1) +
Регистрация: 23.02.2004
Адрес: Киев
Пока что я вижу два решения:
1) через Connection.
2) Через временную таблицу

(еще можно через Connection во временную таблицу )
Что удобнее, буду выяснять на примерах.
Старый 31.05.2007, 14:13   #40  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
Чистый T-SQL (только что проверил работоспособность):
X++:
SELECT id, descr, SUM(f1) AS f1, SUM(f2) AS f2, SUM(f3) AS f3
FROM (SELECT t1.id
                       , t1.descr
                       , CASE WHEN t2.f = 1 THEN t2.f ELSE NULL END AS f1
                       , CASE WHEN t2.f = 2 THEN t2.f ELSE NULL END AS f2
                       , CASE WHEN t2.f = 3 THEN t2.f ELSE NULL END AS f3
            FROM Table1 AS t1 INNER JOIN
                                              Table2 AS t2 ON t1.id = t2.id) AS derivedtbl_1
GROUP BY id, descr
HAVING (SUM(f1) IS NOT NULL) AND (SUM(f2) IS NOT NULL) AND (SUM(f3) IS NOT NULL)
З.Ы. как это сделать в Аксапте - без понятия :-)

Последний раз редактировалось Dolter; 31.05.2007 в 14:16.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помогите с запросом AvrDen DAX: Программирование 8 07.08.2007 15:24
Помогите с запросом Antonuch DAX: Программирование 4 21.06.2007 15:46
помогите с запросом oleg_e DAX: Программирование 4 10.10.2006 13:04
Помогите с запросом.. DarkBear DAX: Программирование 2 15.08.2005 13:38
Помогите с SQL запросом malex DAX: Программирование 8 26.07.2005 13:43
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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