Имя: Пароль:
1C
 
Помогите с запросом. Среднее значение без NULL.
0 victorious
 
28.05.07
08:08
Здраствуйте. Запрос вида:
|ИТОГИ
|СРЕДНЕЕ(Процент1).
Как выбросить из запроса значения со значением NULL,
чтобы правильно считался средний процент?
1 SnarkHunter
 
28.05.07
08:10
Поставь условие на отсутствие NULL...
2 ZyXEL
 
28.05.07
08:10
как как.... NotNULL не пойдет???
3 victorious
 
28.05.07
08:14
Может пример запроса,
так будет понятнее.
4 Defender aka LINN
 
28.05.07
08:23
ГДЕ
   Поле ЕСТЬ НЕ NULL
5 victorious
 
28.05.07
08:48
нужно чтобы выводил все поля,
не отбрасывал которые пустые,
а итоговый средний процент считал для всех полей отбрасывая пустые.
6 Drock
 
28.05.07
08:56
а не проще в самом начале
ВЫБРАТЬ

ЕСТЬNULL (показатель,0) КАК Показатель

тогда Показатель по которым не будет данных будет представлен не как NULL а как 0
7 victorious
 
28.05.07
10:18
пример:
5 строк данных,
из них со значением процента =5 всего з строки,
а 2 строки со значением "пусто".
Итог должен быть, средний процент 15/3=5,
но запрос считает так, 15/5=3.
Пустые строки без значения процента НУЖНЫ, в них другие еще есть данные.
Помогите с запросом.
8 Денежко
 
28.05.07
10:21
А запрос слабо показать
9 victorious
 
28.05.07
10:23
ТекстЗапроса = "
       |ВЫБРАТЬ РАЗЛИЧНЫЕ
       |    П_РасчетЗаказа.Ссылка КАК Ссылка,
       |    П_РасчетЗаказа.Проведен КАК Проведен,
       |    П_РасчетЗаказа.Ссылка.Дата КАК Дата,
       |    П_РасчетЗаказа.Представление КАК Представление,
       |    П_РасчетЗаказа.Статус КАК Статус,
       |    П_РасчетЗаказа.Т_ОплатаМенеджеру КАК Т_ОплатаМенеджеру,
       |    П_РасчетЗаказа.СтоимостьИтого КАК Сумма_Заказа,
       |    П_РасчетЗаказа.СуммаСоСкидкой КАК СуммаСоСкидкой,
       |    П_РасчетЗаказа.Ответственный КАК Ответственный,
       |    П_РасчетЗаказа.Контрагент КАК Контрагент,
       |    П_РасчетЗаказа.НаименованиеПродукции КАК НаименованиеПродукции,
       |    П_РасчетЗаказа.Тираж КАК Тираж,
       |    П_РасчетЗаказа.МенеджерФП КАК МенеджерФП,
       |    П_РасчетЗаказа.Оборудование КАК Оборудование,
       |    П_РасчетЗаказа.Материал КАК Материал,
       |    П_РасчетЗаказа.Организация КАК Организация,
       |    П_РасчетЗаказа.Процент1 КАК Процент1,
       |    П_РасчетЗаказа.Процент2 КАК Процент2,
       |    П_РасчетЗаказа.Процент3 КАК Процент3,
       |    П_РасчетЗаказа.Сумма1 КАК Сумма1,
       |    П_РасчетЗаказа.Сумма2 КАК Сумма2,
       |    П_РасчетЗаказа.Сумма3 КАК Сумма3,
       |    П_РасчетЗаказа.ДатаСтатус КАК ДатаСтатус,
       |    П_РасчетЗаказа.ДатаМенеджер КАК ДатаМенеджер
       |{ВЫБРАТЬ
       |    Ссылка.*,
       |    Проведен,
       |    Дата,
       |    Представление,
       |    Статус,
       |    Т_ОплатаМенеджеру,
       |    Сумма_Заказа,
       |   СуммаСоСкидкой,
       |    Ответственный,
       |    Контрагент,
       |    НаименованиеПродукции,
       |    Тираж,
       |    МенеджерФП,
       |   Оборудование,
       |    Материал,
       |    Организация,
       |    Процент1,
       |    Процент2,
       |    Процент3,
       |    Сумма1,
       |    Сумма2,
       |    Сумма3,
       |    ДатаСтатус,
       |    ДатаМенеджер
       |}
       |ИЗ
       |    Документ.П_РасчетЗаказа КАК П_РасчетЗаказа
       |{
       | ГДЕ                
       |    Ссылка.* КАК Ссылка,
       |    Проведен КАК Проведен,
       |    Дата КАК Дата,
       |    Статус КАК Статус,
       |    Т_ОплатаМенеджеру КАК Т_ОплатаМенеджеру,
       |    Ответственный КАК Ответственный,
       |    Контрагент КАК Контрагент,
       |    НаименованиеПродукции,
       |    Тираж,
       |    МенеджерФП,
       |   Оборудование,
       |    Материал,
       |    Организация,
       |    Процент1,                    
       |    Процент2,
       |    Процент3,
       |    Сумма1,
       |    Сумма2,
       |    Сумма3,
       |    ДатаСтатус,
       |    ДатаМенеджер
       |}
       |{УПОРЯДОЧИТЬ ПО
       |   Дата,
       |    Проведен,
       |    Статус,
       |    Ответственный,
       |    Контрагент,
       |    НаименованиеПродукции,
       |    Тираж,
       |    МенеджерФП,
       |   Оборудование,
       |    Материал,
       |    Организация
       |}
       |ИТОГИ
       |    СРЕДНЕЕ(Процент1,
       |    СУММА(Сумма_Заказа),
       |    СУММА(СуммаСоСкидкой),
//        |    СУММА(Процент1),
       |    СУММА(Процент2),
       |    СУММА(Процент3),
       |    СУММА(Сумма1),
       |    СУММА(Сумма2),
       |    СУММА(Сумма3)
       |ПО
       |    ОБЩИЕ
       |{ИТОГИ ПО        
       |    Ссылка.* КАК Ссылка,
       |   Дата,
       |    Проведен,
       |    Представление,
       |    Статус,
       |    Т_ОплатаМенеджеру,
       |   Сумма_Заказа,
       |   СуммаСоСкидкой,
       |    Ответственный,
       |    Контрагент,
       |    НаименованиеПродукции,
       |    Тираж,
       |    МенеджерФП,
       |   Оборудование,
       |    Материал,
       |    Организация,
       |    Процент1,
       |    Процент2,
       |    Процент3,
       |    Сумма1,
       |    Сумма2,
       |    Сумма3,
       |    ДатаСтатус,
       |    ДатаМенеджер
       |}
//        |АВТОУПОРЯДОЧИВАНИЕ";
       |}";
10 Defender aka LINN
 
28.05.07
10:29
(7) Тогда считай среднее подзапросом.
11 victorious
 
28.05.07
10:30
(10) может покажешь,
например, для процент1?
12 Денежко
 
28.05.07
10:30
Я бы вот так попробовал
ИТОГИ
   СРЕДНЕЕ(ВЫБОР
           КОГДА 1 = 1
               ТОГДА ПРоцент
           ИНАЧЕ 0
       КОНЕЦ) КАК ПРоцент
13 victorious
 
28.05.07
10:40
(12) также считает
14 Neco
 
28.05.07
10:55

ВЫБРАТЬ РАЗЛИЧНЫЕ
....
   ЕСТЬNULL(П_РасчетЗаказа.Процент1,0) КАК Процент1,
   ЕСТЬNULL(П_РасчетЗаказа.Процент2,0) КАК Процент2,
   ЕСТЬNULL(П_РасчетЗаказа.Процент3,0) КАК Процент3,
15 victorious
 
28.05.07
11:15
(14) пробовал, не получается :(
16 Neco
 
28.05.07
11:19
(15) Ты лучше расскажи откуда у тебя NULL в реквизите документа и как проверяешь?
17 victorious
 
28.05.07
11:26
(16) может NULL и не нужен,
уже запутался, вот мой запрос без NULL (9),
там есть
 |ИТОГИ
 |     СРЕДНЕЕ(Процент1).

А мне нужно, чтобы,
пример:
5 строк данных,
из них со значением процента =5 всего 3 строки,
а 2 строки со значением 0, т.е.нет значения.
Итог должен быть, средний процент 15/3=5,
но запрос считает так, 15/5=3.
Пустые строки без значения процента НУЖНЫ, в них другие еще есть данные,
не нужно их вообще убирать, но при подсчете среднего процента запрос игнорировал их.
18 Neco
 
28.05.07
11:35
(17) Правильно считает. Если хочешь, тогда нужно просто убрать из запроса нулевые строки:
ГДЕ
 Процент1 <> 0
19 Денежко
 
28.05.07
11:36
Не   нада воттак делать

ВЫБРАТЬ
   ЗаказыПокупателейОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
   ЗаказыПокупателейОстатки.ЗаказПокупателя КАК ЗаказПокупателя,
   ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
   ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоОстаток,
   
   ЗаказыПокупателейОстатки.КоличествоОстаток КАК КоличествоНужныйостаток,
   0 Как СтандартноеСреднее,
   ВЫБОР
       КОГДА ЗаказыПокупателейОстатки.КоличествоОстаток > 1
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК НужныеЗаписи,
   0 КАК КоличествоНужныйЗаписей,
   0 КАК НужноеСреднее
ИЗ
   РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
ИТОГИ
   СРЕДНЕЕ(ВЫБОР
           КОГДА КоличествоОстаток > 0
               ТОГДА КоличествоОстаток
           ИНАЧЕ 0
       КОНЕЦ) КАК СтандартноеСреднее,
       
   СУММА(ВЫБОР
           КОГДА КоличествоОстаток > 1
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ) КАК КоличествоНужныйЗаписей,
       
   СУММА(КоличествоНужныйостаток) / ВЫБОР
       КОГДА СУММА(НужныеЗаписи) = 0
           ТОГДА 1
       ИНАЧЕ СУММА(НужныеЗаписи)
   КОНЕЦ КАК НужноеСреднее
ПО
   Номенклатура
20 Денежко
 
28.05.07
11:38
Можно считать среднее по условию! ПОкарай не мере у меня получилось посчитать среднее кол-во услуг остаток которых больше 1. Причем  в формуле (А1+А2+..)/n  можно  управлять как числителем так и знаменателем!
21 Неа123
 
28.05.07
11:46
Среднее(ВЫБОР
   КОГДА Процент1 > 0
         ТОГДА Процент1
       КОНЕЦ) КАК Процент1
т.е. без Иначе
22 Денежко
 
28.05.07
11:51
(21)ТОчно!
23 Neco
 
28.05.07
11:51
(21) см. (12)-(13)
24 Денежко
 
28.05.07
11:52
(23) не -21 прав. Малаттца!
25 Neco
 
28.05.07
12:08
(19)-(22) Че-то не канает ваш запрос
Когда один итог по номенклатуре и несколько записей:

СРЕДНЕЕ(ВЫБОР
           КОГДА КоличествоОстаток > 0
               ТОГДА КоличествоОстаток
           //ИНАЧЕ 0
       КОНЕЦ) КАК СтандартноеСреднее,
   СУММА(ВЫБОР
           КОГДА КоличествоОстаток > 1
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ) КАК КоличествоНужныйЗаписей,

Дает вообще 0. Впринципе понятно почему
А

СУММА(КоличествоНужныйостаток) / ВЫБОР
       КОГДА СУММА(НужныеЗаписи) = 0
           ТОГДА 1
       ИНАЧЕ СУММА(НужныеЗаписи)
   КОНЕЦ КАК НужноеСреднее

Аккурат дает сумму остатка, поскольку СУММА(НужныеЗаписи) = 1

ЗЫ: проверял на УПП демке на диване для отдыха
26 Денежко
 
28.05.07
12:18
(25)
ТО пишь проверял на 1 записи?.
Какая исходная выборка данных получается?

....
   ВЫБОР
       КОГДА ЗаказыПокупателейОстатки.КоличествоОстаток = 1
           ТОГДА 1
       ИНАЧЕ 0
   КОНЕЦ КАК НужныеЗаписи,

       ВЫБОР
       КОГДА ЗаказыПокупателейОстатки.КоличествоОстаток = 1
           ТОГДА ЗаказыПокупателейОстатки.КоличествоОстаток
       ИНАЧЕ 0
   КОНЕЦ КАК КоличествоНужныйостаток,


.....
Итоги
....
   СУММА(КоличествоНужныйостаток) / ВЫБОР
       КОГДА СУММА(НужныеЗаписи) = 0
           ТОГДА 1
       ИНАЧЕ СУММА(НужныеЗаписи)
   КОНЕЦ КАК НужноеСреднее,
   СУММА(НужныеЗаписи)

ПО
   Номенклатура
++++
Имеем следующую выборку
Ном           Кол

Услуга1        1

Услуга1        1

Услуга1        5

результат будет  

Товаро       НужноеСреднее    
Услуга1       1

Я так делал расчет среднего колва позиций номенклатуры с с остатком =1
27 Neco
 
28.05.07
12:54
(26) Гм.. если у нас стоит задача посчитать средний остаток только по номенклатуре, то зачем все эти сложности с ВЫБОР... и т.д.  Он всегда равен обычному остатку. Вот если в твой запрос добавить еще группировку скажем по договору... всеравно не получается, выдаст неверный результат. НужноеСреднее - просто просуммирует остатки по записям.
Вообще думаю средние по остаткам лучше не обсуждать так как в (9) есть запрос и нужно исходить из условий этого запроса.
28 victorious
 
28.05.07
12:57
(21) Вот то что нужно!!!

Среднее(ВЫБОР
   КОГДА Процент1 > 0
         ТОГДА Процент1
       КОНЕЦ) КАК Процент1
т.е. без Иначе

Спасибо ВСЕМ!!!
29 Денежко
 
28.05.07
13:07
(27)
Я только показал как это можно посчитать в ручную .
30 Денежко
 
28.05.07
13:09
Просто делал такое -када нужно было усреднять величины - не все- с разбивкой по интервавлам.
Например - средняя сумма продаж    не прерышающих  10000  тыс руб....
Все счтитается!-)
31 victorious
 
28.05.07
13:11
(30) Спасибо.
При решении подобной задачи буду знать.
32 AntonioS
 
28.05.07
13:13
(0) не совсем понял о чем речь.
среднее должно считаться правильно для значений NULL( а не ноль)
например:

выбрать Табл.Поле, Табл.Гр
из (
   выбрать 6 Поле, "А" Гр
   объединить все
   выбрать 4 Поле, "А" Гр
   объединить все
   выбрать NULL Поле, "А" Гр
) Табл
Итоги
   Среднее(Табл.Поле)
по Табл.Гр

выдаст среднее = 5
33 Neco
 
28.05.07
13:14
34 Neco
 
28.05.07
13:17
(32) Значение NULL при расчете среднего игнорируется
35 AntonioS
 
28.05.07
13:23
(34) ну так и я о том же.
смысл сабжа тогда в чем?
36 Shirenin
 
28.05.07
23:13
прикольно ... на самом деле задача была превратить 0 в NULL в итоге ;)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс