Помогите с выборкой для запроса.

Sivorius
Дата: 16.09.2005 13:29:56
Нужно создать запрос из сиквельных таблиц. учитывая в одной колонке выборку типа:(это работает в кристале, но нужно импотртуть в МС Аксес)
[quote]
stringVar array x2 := ["501094","502604","612716","621307"];
stringVar array x0_1 := ["100021","100084","100088","100089"];
stringVar array x0_2 := ["113206"];
stringVar array x0_2PG := ["0422","0432","0437"];
stringVar array x0_19 := ["112102","112104","112105","112106","112107","117404","117405"];
stringVar array x0_225 := ["113105","200724"];
stringVar array x0_35 := ["664874"];
stringVar array x10 := ["200681","200692","200693","200865","200926","200977","600741","610590"];
stringVar array x50 := ["200685"];
stringVar array x1_15 := ["145314"];
stringVar array x0_05PG := ["0430"];
stringVar array x0_5PG := ["0433","0435","0438","0450"];
stringVar array x0_25PG := ["0452"];
stringVar array x0_685 := ["116304","116305","116306"];
stringVar array x0_205 := ["116505"];
stringVar array x2_21 := ["116804"];
stringVar array x0_6 := ["117504","117505","117506"];
stringVar array x0_695 := ["502680"];
stringVar array x100 := ["500145","600898","600960","600961"];
stringVar array x384 := ["503734"];
stringVar array x25 := ["600897"];

if [OR21005] in x2 then {@QTY}*2
else if [OR21005] in x0_1 then {@QTY}*0.1
else if [OR21005] in x0_2 or [SC01037] in x0_2PG then {@QTY}*0.2
else if [OR21005] in x0_19 then {@QTY}*0.19
else if [OR21005] in x0_225 then {@QTY}*0.225
else if [OR21005] in x0_35 then {@QTY}*0.35
else if [OR21005] in x10 then {@QTY}*10
else if [OR21005] in x50 then {@QTY}*50
else if [OR21005] in x1_15 then {@QTY}*1.15
else if [SC01037] in x0_05PG then {@QTY}*0.05
else if [SC01037] in x0_5PG and [OR21005]<>"501583" then {@QTY}*0.5
else if [SC01037] in x0_25PG or [OR21005]="501583" then {@QTY}*0.25
else if [OR21005] in x0_685 then {@QTY}*0.685
else if [OR21005] in x0_205 then {@QTY}*0.205
else if [OR21005] in x2_21 then {@QTY}*2.21
else if [OR21005] in x0_6 then {@QTY}*0.6
else if [OR21005] in x0_695 then {@QTY}*0.695
else if [OR21005] in x100 then {@QTY}*100
else if [OR21005] in x384 then {@QTY}*384
else if [OR21005] in x25 then {@QTY}*25
else {@QTY}
[/quote]

я дошел только, чтоб переписать в более "простое" выражение вида:
[quote]
iif([OR21005]=["501094","502604","612716","621307"],[OR21012]*2,iif([OR21005] = ["100021","100084","100088","100089"], [OR21012]*0.1,iif([OR21005] = ["113206"] or [SC01037]=["0422","0432","0437"],[OR21012]*0.2,iif([OR21005]=["112102","112104","112105","112106","112107","117404","117405"],[OR21012]*0.19,iif([OR21005]=["113105","200724"],[OR21012]*0.225,iif([OR21005]=["664874"],[OR21012]*0.35,iif([OR21005]=["200681","200692","200693","200865","200926","200977","600741","610590"],[OR21012]*10,iif([OR21005]=["200685"],[OR21012]*50,iif([OR21005]=["145314"],[OR21012]*1.15,iif([SC01037]=["0430"],[]*0.05,iif([SC01037]=["0433","0435","0438","0450"] and [OR21005]<>"501583",[OR21012]*0.5,iif([SC01037]=["0452"] or [OR21005]="501583",[OR21012]*0.25,[OR21012]))))))))))))iif([OR21005]=["116304","116305","116306"],[OR21012]*0.685,iif([OR21005]=["116505"],[OR21012]*0.205,iif([OR21005]=["116804"],[OR21012]*2.21,iif([OR21005]=["117504","117505","117506"],[OR21012]*0.6,iif([OR21005]=["502680"],[OR21012]*0.695,iif([OR21005]=["500145","600898","600960","600961"],[OR21012]*100,iif([OR21005]=["503734"],[OR21012]*384,iif([OR21005]=["600897"],[OR21012]*25,[OR21012]))))))))[/quote]
Но столкнулся с двумя проблемами:
1. В таком виде все что в "[]" он понимает как задаваемое если после знака "=", если внести в "()" то выдает синтаксическую ошибку
2. Как вы можете догадаться выборка очень длинная и не влезает в поле отведенное для нее в запросе(я разбил на две части, но думаю работать не буит).

Зашел в тупик.
AND_110
Дата: 16.09.2005 13:57:47
1. создать в Акцессе функцию типа:
f(a,b) = c

2. создать в Акцессе запрос типа:
SELECT... f([OR21005],[OR21012])
Sivorius
Дата: 16.09.2005 15:19:43
Что-то я не понял.
У меня есть таблицы линкованые на сиквел, и запрос.
Весь этот "фильтр" работает на одну колонку. т.е. результат выводится в одну коллонку из множества.
Селект юзать как я понимаю в таблице? Тык много строк получается по любому.
AND_110
Дата: 16.09.2005 15:43:47
[OR21005], [SC01037], [OR21012] - это поля в запросе к таблицам?
тогда в тот же запрос нужно вставить функцию,
а функция должна их взять и сделать то же, что и quote.
Sivorius
Дата: 16.09.2005 16:05:19
Это поля таблицы. 05-е и СЛ действие по которым определяется 12-е корректируется в зависимости от условиЯ.
Бр.р..р.р А как функцию забацать? и привязать.
AND_110
Дата: 16.09.2005 16:17:40
привязать вот так:
SELECT [OR21005], [SC01037], [OR21012] , quote([OR21005], [SC01037], [OR21012]) FROM Table1
а насчет создания - луше в Helpe, но синтаксис похожий