|
|
#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 |
|
Участник
|
жара однако, 9000 символов это больше 8 Кб, приношу свои извенения, ашыпся. Похоже ограничение на длинну запроса, как раз и является причиной ошибки.
|
|
|
|
|
#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 | |||
|