|
![]() |
#1 |
Программатор
|
|
|
![]() |
#2 |
Участник
|
Сори. Последний раз фигню написал. На автобус спешил (похавать).
Есть три тиблицы как я понял. Первая номенклатуры. Вторая характеристики и третья связь характеристик с номенклатурами. 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. |
|
![]() |
#3 |
Участник
|
[QUOTE=miklenew;139595]
Есть три тиблицы как я понял. /QUOTE] Две таблицы: Таблица товаров и таблица характеристик. Хотя это ничего не меняет. |
|
![]() |
#4 |
Программатор
|
Это чо папало...Так низя...
|
|
![]() |
#5 |
Участник
|
И получаем жесткий подвисон
![]() ![]() Уж лучше тогда вариант с 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. |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от 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 символов) или что-то другое? |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Участник
|
![]() ![]() ![]() |
|
![]() |
#11 |
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. |
|
![]() |
#12 |
Участник
|
А зачем так сложно?
X++: SELECT Table1.Id, Table1.Descr FROM Table1 INNER JOIN Table2 ON Table1.Id = Table2.Id WHERE Table2.f = 1 OR Table2.f = 2 OR Table2.f = 3 /*или Table2.f IN (1, 2, 3)*/ GROUP BY Table1.Id, Table1.Descr HAVING COUNT(*) = 3
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Dolter (1). |
Теги |
ax3.0 |
|
![]() |
||||
Тема | Ответов | |||
Помогите с запросом | 8 | |||
Помогите с запросом | 4 | |||
помогите с запросом | 4 | |||
Помогите с запросом.. | 2 | |||
Помогите с SQL запросом | 8 |
|