![]() |
#21 |
Axapta
|
|
|
![]() |
#22 |
Программатор
|
|
|
![]() |
#23 |
Участник
|
И получаем жесткий подвисон
![]() ![]() Уж лучше тогда вариант с 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. |
|
![]() |
#24 |
Участник
|
Сори. Последний раз фигню написал. На автобус спешил (похавать).
Есть три тиблицы как я понял. Первая номенклатуры. Вторая характеристики и третья связь характеристик с номенклатурами. 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. |
|
![]() |
#25 |
Участник
|
[QUOTE=miklenew;139595]
Есть три тиблицы как я понял. /QUOTE] Две таблицы: Таблица товаров и таблица характеристик. Хотя это ничего не меняет. |
|
![]() |
#26 |
Участник
|
Цитата:
Сообщение от 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 } } Не могу понять почему: есть какое то ограничение на размер запроса? (длина строки получается больше 9000 символов) или что-то другое? |
|
![]() |
#27 |
Участник
|
|
|
![]() |
#28 |
Участник
|
|
|
![]() |
#29 |
Участник
|
|
|
![]() |
#30 |
Участник
|
Не понимаю. Вот две таблицы. 1-я номенклатур. 2-я связь. А третья таблица характеристики. Я так понимаю Feture - это id характеристики.
|
|
![]() |
#31 |
Участник
|
|
|
![]() |
#32 |
Участник
|
В даном случае достаточно только id характеристики. Действительно еще есть справочник характеристик, но для данного запроса в нем нет необходимости.
|
|
![]() |
#33 |
Участник
|
|
|
![]() |
#34 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: leshy (1). |
![]() |
#35 |
Участник
|
![]() ![]() ![]() |
|
![]() |
#36 |
Участник
|
|
|
![]() |
#37 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: leshy (1). |
![]() |
#38 |
Участник
|
Можно еще сделать запрос с максимальным количеством джойнов, а оставшиеся условия проверить уже внутри цикла. или результат первого запроса сохранить во временную таблицу, потом сделать запрос для оставшихся условий уже с временной таблицей.
|
|
|
За это сообщение автора поблагодарили: leshy (1). |
![]() |
#39 |
Участник
|
Пока что я вижу два решения:
1) через Connection. 2) Через временную таблицу (еще можно через Connection во временную таблицу ![]() Что удобнее, буду выяснять на примерах. |
|
![]() |
#40 |
1C
|
Чистый 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 |
|
![]() |
||||
Тема | Ответов | |||
Помогите с запросом | 8 | |||
Помогите с запросом | 4 | |||
помогите с запросом | 4 | |||
Помогите с запросом.. | 2 | |||
Помогите с SQL запросом | 8 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|