Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Люди добрые! Погомогите, кто чем сможет! :)  [new]
ElDoRada
Member

Откуда:
Сообщений: 5
Это ужасно.......
Суть проблемы: Есть таблица. Примерная структура - (код, год, макс., oct1, oct2,oct3) Надо получить строку, которая будет содержать для определенного значения поля "Код" среднее по каждому из полей... причем среднее расчитывается след. образом: складываются все значения в столбце и делятся на количесво строк :) казалось бы - проще простого...
но есть одно НО... в любом из полей значением может быть "*". А может и не быть. Так вот в случае наличия вот такой вот звездочки делить надо на (количество строк-количество звездочек по столбцу).

пример:
код год макс oct1 oct2 oct3
---------------------------
123 1945 62 15 10 20
123 1946 12 * 10 50
123 1947 0 10 *
123 1948 31 14 15
123 1949 * 10 10 12
123 1950 65 30 * 25
---------------------------
итог, например по полю "макс", должен быть 34... т.е. количество строчек должно быть =5
пробовала всякое
даже писАла count(IIF(ALLTRIM(l.max_)=="*",0,1))
ну никак не хочет оно выкидывать из рассмотрения эту строчку со звездочкой

И еще один момент
хотелось бы всё это сделать в select'е :)
14 ноя 07, 13:06    [4914589]     Ответить | Цитировать Сообщить модератору
 Re: Люди добрые! Погомогите, кто чем сможет! :)  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
ElDoRada
Это ужасно.......
....
пробовала всякое
.....
даже писАла count(IIF(ALLTRIM(l.max_)=="*",0,1))


Теперь попробуй напиши:

SUM(IIF(ALLTRIM(l.max_)=="*",0,1))
14 ноя 07, 13:16    [4914662]     Ответить | Цитировать Сообщить модератору
 Re: Люди добрые! Погомогите, кто чем сможет! :)  [new]
ElDoRada
Member

Откуда:
Сообщений: 5
)))))))))))))
ну вы меня совсем уж за дуру-то не считайте :)
я могла бы весь SELECT выложить :) но суть в том, что суммируется нормально :) делится неправильно :) надо на 5 делить (если рассматривать пример), а оно делит на 6
вот
14 ноя 07, 13:22    [4914714]     Ответить | Цитировать Сообщить модератору
 Re: Люди добрые! Погомогите, кто чем сможет! :)  [new]
ElDoRada
Member

Откуда:
Сообщений: 5
и если уж быть совсем точными, то писать надо
SUM(IIF(ALLTRIM(l.max_)=="*",0,VAL(l.max_)))
14 ноя 07, 13:24    [4914740]     Ответить | Цитировать Сообщить модератору
 Re: Люди добрые! Погомогите, кто чем сможет! :)  [new]
ElDoRada
Member

Откуда:
Сообщений: 5
ой...
простите :)
я точно дура )))))))))))))))
спасибо. работает
:-*
14 ноя 07, 13:30    [4914811]     Ответить | Цитировать Сообщить модератору
 Re: Люди добрые! Погомогите, кто чем сможет! :)  [new]
PaulWist
Member

Откуда:
Сообщений: 2236
ElDoRada
)))))))))))))
ну вы меня совсем уж за дуру-то не считайте :)
я могла бы весь SELECT выложить :) но суть в том, что суммируется нормально :) делится неправильно :) надо на 5 делить (если рассматривать пример), а оно делит на 6
вот


Ну иии...

CREATE CURSOR test (код i,  год i, макс c(10), oct1 c(10), oct2 c(10), oct3 c(10))


INSERT INTO test VALUES (123, 1945, '62', '15', '10', '20')
INSERT INTO test VALUES (123, 1946, '12','*', '10', '50') 
INSERT INTO test VALUES (123, 1947, '0' ,'10', '*', '')
INSERT INTO test VALUES (123, 1948, '31','14', '15', '')
INSERT INTO test VALUES (123, 1949, '*' ,'10', '10', '12')
INSERT INTO test VALUES (123, 1950, '65','30', '*' , '25')

SELECT SUM(IIF(allt(макс) == '*',0,VAL(макс)))/SUM(IIF(allt(макс) == '*',0,1)), ;
SUM(IIF(allt(макс) == '*',0,VAL(макс))), SUM(IIF(allt(макс) == '*',0,1)) FROM test
14 ноя 07, 13:40    [4914904]     Ответить | Цитировать Сообщить модератору
 Re: Люди добрые! Погомогите, кто чем сможет! :)  [new]
ElDoRada
Member

Откуда:
Сообщений: 5
спасибо-спасибо :)
я ж говорю, что дура я :) я не поняла сразу о чем шла речь
а теперь уже всё работает как надо :)
14 ноя 07, 13:44    [4914936]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить