Имя: Пароль:
1C
 
Агрегатные функции в итогах запроса
0 SKrin
 
11.10.05
10:19
похожая проблема v8: Как в ИТОГИ...ПО сделать итог одной колонки по данным из других?
необходимо в запросе рачитать среднюю ОплатуЗаЕд

ВЫБРАТЬ
   Работы.Организация КАК Предприятие,
   Работы.ВидРабот КАК ВидРабот,
   СУММА(Работы.Выполнено) КАК Выполнено,
   СУММА(Работы.ОплатаВсего) КАК ОплатаВсего,
   Работы.ОплатаЗаЕд КАК ОплатаЗаЕд
ИЗ
   (ВЫБРАТЬ
       ДокРаботы.Ссылка.Организация КАК Организация,
       ДокРаботы.ВидРабот КАК ВидРабот,
       СУММА(ДокРаботы.Выполнено) КАК Выполнено,
       СУММА(ДокРаботы.ОплатаВсего) КАК ОплатаВсего,
       ВЫБОР
           КОГДА ДокРаботы.Выполнено <> 0
               ТОГДА ДокРаботы.ОплатаВсего / ДокРаботы.Выполнено
           ИНАЧЕ 0
       КОНЕЦ КАК ОплатаЗаЕд
   ИЗ
       Документ.ВыпРаботы.Работы КАК ДокРаботы
   СГРУППИРОВАТЬ ПО
       ДокРаботы.ВидРабот,
       ВЫБОР
           КОГДА ДокРаботы.Выполнено <> 0
               ТОГДА ДокРаботы.ОплатаВсего / ДокРаботы.Выполнено
           ИНАЧЕ 0
       КОНЕЦ) КАК Работы
СГРУППИРОВАТЬ ПО
   Работы.ВидРабот

УПОРЯДОЧИТЬ ПО
   ВидРабот

ИТОГИ
   СУММА(Выполнено),
   СУММА(ОплатаВсего),
   СРЕДНЕЕ(ОплатаЗаЕд)
ПО
   Предприятие,
   ВидРабот

в результате считает не так как нужно

Выполнено|ОплатаВсего|ОплатаЗаЕд
8,76         1 899,98     168,82
5,67         1 230,98     217,26
3,09              669     216,52
   0            0           0
                                   
как правильно сделать чтобы считал верно?
1 SKrin
 
11.10.05
14:28
//Выполнено|ОплатаВсего|ОплатаЗаЕд|
 // 8,76     1 899,98     168,82 |<-этот итог неправильный,должно=(1 899,98/8,76)=216,89
 //------------------------------|
 // 5,67     1 230,98     217,26 | = (1 230,98/5,67)
 // 3,09          669     216,52 | = (669/3,09)
 //    0            0          0 |
//
2 SnarkHunter
 
11.10.05
14:32
ВЫБРАТЬ
  Работы.Организация КАК Предприятие,
  Работы.ВидРабот КАК ВидРабот,
  СУММА(Работы.Выполнено) КАК Выполнено,
  СУММА(Работы.ОплатаВсего) КАК ОплатаВсего,
  (СУММА(Работы.ОплатаВсего) /  СУММА(Работы.Выполнено)) КАК ОплатаЗаЕд
3 SKrin
 
11.10.05
14:39
(2) а вдруг Работы.Выполнено=0
4 SnarkHunter
 
11.10.05
14:47
А проверить что мешает?
5 SKrin
 
11.10.05
14:52
(4) где? во встроенном запросе пробовал-бесполезно
а на вложенные агрегатные функции ругается
6 SnarkHunter
 
11.10.05
15:01
?(СУММА(Работы.Выполнено) = 0, 0, (СУММА(Работы.ОплатаВсего) /  СУММА(Работы.Выполнено)))
7 SKrin
 
11.10.05
15:11
(6) а че в запросах так можно?
8 SnarkHunter
 
11.10.05
15:14
Если не получится, тогда через Case попробуй...