|
запрос iif(AND
|
|||
---|---|---|---|
#18+
Появился вопрос по сложному запросу. Помогите пожалуйста! необходимо из двух таблиц kadr и prof выбрать ряд полей и осуществить сложный запрос с расчетом уровня выполняемых работ человеком по формуле (Kadr.zp1/Prof.virab) с учетом разрядной сетки ,где 3,87 - 1 разряд 4,26 - второй 5.23 - третий и т д 0,39, 0,97 - разница между разрядами Делаю такой запрос SELECT Prof.kodprof, Prof.virab, Kadr.zp1,; IIF(AND((Kadr.zp1)/Prof.virab>3.87,(Kadr.zp1)/Prof.virab<4.26),(((Kadr.zp1)/Prof.virab-3.87)/0.39)+1,IIF(AND((Kadr.zp1)/Prof.virab>4,26,(Kadr.zp1)/Prof.virab<5.23),(((Kadr.zp1)/Prof.virab-4.26)/0.97)+2)); FROM ; bd!prof ; INNER JOIN bd!kadr ; ON Prof.kodprof = Kadr.kodprof выдает ошибку missing Comma (,) в чем моя ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 13:26 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
anrio13Появился вопрос по сложному запросу. Помогите пожалуйста! необходимо из двух таблиц kadr и prof выбрать ряд полей и осуществить сложный запрос с расчетом уровня выполняемых работ человеком по формуле (Kadr.zp1/Prof.virab) с учетом разрядной сетки ,где 3,87 - 1 разряд 4,26 - второй 5.23 - третий и т д 0,39, 0,97 - разница между разрядами Делаю такой запрос SELECT Prof.kodprof, Prof.virab, Kadr.zp1,; IIF(AND((Kadr.zp1)/Prof.virab>3.87,(Kadr.zp1)/Prof.virab<4.26),(((Kadr.zp1)/Prof.virab-3.87)/0.39)+1,IIF(AND((Kadr.zp1)/Prof.virab>4,26,(Kadr.zp1)/Prof.virab<5.23),(((Kadr.zp1)/Prof.virab-4.26)/0.97)+2)); FROM ; bd!prof ; INNER JOIN bd!kadr ; ON Prof.kodprof = Kadr.kodprof выдает ошибку missing Comma (,) в чем моя ошибка? И далее Возвращает одно из двух заданных значений в зависимости от величины логического выражения. IIF(lExpression, eExpression1, eExpression2) Параметры lExpression Определяет логическое выражение, для которого вычисляется функция IIF( ). eExpression1, eExpression2 Если значение логического выражения lExpression = True (.T.), то возвращается значение eExpression1 , а выражение eExpression2 не вычисляется. Если значение логического выражения lExpression = False (.F.) или равно null (.NULL.), то возвращается значение eExpression2, а выражение eExpression1 не вычисляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 13:43 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
да с iff-и все нормально.. просто откудо-то придумал функцию and(.t.,.t.)->.t. есть оператор and .t. and .t. -> .t. Ненужные скобки тоже не к чему.4.26 через запятую написал. Въехать в описанную задачу сложно но предположу что хотел ты хотел сделать нечто типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 14:47 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
ТАК подобные задачи не решаются. Необходима дополнительная таблица-справочник со списком разрядов и диапазоном коэффициентов 1 разряд = от 0 до 3,87 2 разряд = от 3,88 до 4,26 3 разряд = от 4,27 до 5,23 4 разряд = от 5,24 до 99999 (бесконечности) Нужен именно диапазон, поскольку сравнивать действительные числа на точное совпадение - это всегда риск из-за погрешностей округления. Если рассмотреть решение через временную таблицу (курсор), то это будет выглядеть примерно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 15:03 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
ВладимирМ , а можно пояснить что ознaчают некоторые функции например Round? и почему в фразе (fromValue N(5,2), toValue N(5,2) именно 5 и 2, а не 7 и 4 к примеру? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 17:30 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
>что ознaчают некоторые функции например Round? Округление. В хелп. >и почему в фразе (fromValue N(5,2), toValue N(5,2) именно 5 и 2, а не 7 и 4 к примеру? Это число с фиксированной точкой: 2 дробных разряда и 2 (=5-2-1(точка)) десятичных. В хелп. Именно столько, наверное, просто потому, что в примере нет цифр, которые бы не поместились в (5,2) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 18:03 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
в смысле, 2 целых разряда и 2 десятичныз :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 18:03 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
tanglir>и почему в фразе (fromValue N(5,2), toValue N(5,2) именно 5 и 2, а не 7 и 4 к примеру? Это число с фиксированной точкой: 2 дробных разряда и 2 (=5-2-1(точка)) десятичных. В хелп. Именно столько, наверное, просто потому, что в примере нет цифр, которые бы не поместились в (5,2) Ну и, кроме того, все желающие уже ознакомились с форматом записи полей в DBaseIII/IV. N (numeric) хранится "as is", то есть не только десятичная точка присутствует в таблице, а и место под знак "-"... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2011, 21:54 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
Блин задание усложнилось( оказалось, что надо чтобы получалось значение исходя из Prof.tip если tip=станочники, то считается по разрядам = 3.87;4.26;5.23;6.58;7.75 , а если tip=прочее, то по другим разрядам = 3.52;3.87.4.75;5.28;5.99 при этом еще в этом запросе нужно будет вводить другие формулы типа Count и SUM (ну это просто) вопрос если создать два курсора с разрядами, то как и куда вводить условие для выбора формулы расчета????? Пока попытался понять ваши примеры, но осознать весь этот код не вышло да еще и нового пришлось добавить и естественно не пашет автор* создаю курсор1 create cursor curClass (fromValue N(5,2), toValue N(5,2), numClass I, Description C(10)) insert into curClass values (0, 3.87, 1, "1 разряд") insert into curClass values (3.88, 4.26, 2, "2 разряд") insert into curClass values (4.27, 5.23, 3, "3 разряд") insert into curClass values (5.24, 5.81, 4, "4 разряд") insert into curClass values (5.82, 6.58, 5, "5 разряд") insert into curClass values (6.59, 7.75, 6, "6 разряд") * создаю курсор2 create cursor curC (fromValue N(5,2), toValue N(5,2), numC I, Description C(10)) insert into curC values (0, 3.52, 1, "1 разряд") insert into curC values (3.53, 3.87, 2, "2 разряд") insert into curC values (3.88, 4.75, 3, "3 разряд") insert into curC values (4.76, 5.28, 4, "4 разряд") insert into curC values (5.29, 5.99, 5, "5 разряд") select ; Prof.kodprof, ; Prof.virab, ; Kadr.zp1, ; SUM(Kadr.zp1) Prof.tip, ; Curclass.numclass, ; Curclass.description, ; Curc.numc, ; Curc.description ; IIF(prof.tip='станочники', cursor Curclass, cursor CurC) FROM ; bd!prof ; INNER JOIN bd!kadr ; ON Prof.kodprof = Kadr.kodprof ; INNER JOIN curClass Curclass ; ON ROUND(Kadr.zp1/Prof.virab,2) BETWEEN Curclass.fromvalue AND Curclass.tovalue INNER JOIN curC Curclass ; ON ROUND(Kadr.zp1/Prof.virab,2) BETWEEN Curc.fromvalue AND Curc.tovalue IIF(prof.tip='станочники', cursor Curclass, cursor CurC) - вот на это пишет Command Contains unnreccognized phrase/keyword я понимаю что написано коряво, но иначе не могу понять как объявить чтобы выполнялся расчет из курсора 1 или курсора 2 при prof.tip='станочники' , возможно имена неверно задал курсоров, но без этой строки все работает и кстати как задать с курсорами group by? ведь в формулах он нужен а без него теряется уникализация , нужно чтобы не повторялись записи с одинаковым Prof.kodprof - а тут 11111 выводит столько, сколько их есть в таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 00:20 |
|
запрос iif(AND
|
|||
---|---|---|---|
#18+
Не надо выдумывать проблемы на ровном месте. У Вас условие, что разряды зависят от типа. Другими словами, "разряд" кроме диапазона имеет еще дополнительный реквизит "тип". Ну, и заведите этот реквизит в справочник разрядов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2011, 13:00 |
|
|
start [/forum/topic.php?fid=41&msg=37270461&tid=1584356]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 280ms |
total: | 430ms |
0 / 0 |