![]() |
|
Помогите с запросом. Среднее значение без 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
|
|
|||
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. Впринципе понятно почему А Аккурат дает сумму остатка, поскольку СУММА(НужныеЗаписи) = 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
|
Ну и до кучи:
Книга знаний: v8: Расчет нестандартных итогов в запросе; |
|||
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 в итоге ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |