![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить SUM обрабатывать NULL [MSSQL]
Ольга © (2006-09-22 10:51:00)Есть 2 таблицы - справочник объектов и данные по объектам.
Нужно посчитать суммы данных по объектам и датам, но так, чтобы сумма считалась только тогда, когда есть данные по всем объектам за дату, иначе сумма=NULL
Мой запрос выдает некорректные суммы (по тем данным, что есть, NULL игнорируется):
SELECT id_obj, dt, SUM(b.Value)
FROM cls_objects a LEFT OUTER JOIN obj_data b ON a.id_obj=b.id_obj
GROUP BY id_obj, dt
zdm (2006-09-22 12:00:00) [1]Удалено модератором
sniknik (2006-09-22 12:00:00) [2]> Трудно уловить смысл на табличке
добавь запись с NULL и посмотри разницу.
> Ты бы на предложенных структурах предложил.
т.е. готовый "продукт" для копипасте?
Ega23 (2006-09-22 11:59:00) [3]
> zdm © (22.09.06 11:58) [35]
Нет, просто кто-то флудит не по теме...
zdm (2006-09-22 11:58:00) [4]Удалено модератором
ЮЮ (2006-09-22 11:57:00) [5]
> Stanislav © (22.09.06 11:50) [29]
> Чем не устраевает - Stanislav © (22.09.06 11:24) [14]
Трудно уловить смысл на табличке
1
1
1
3
Я, например, не смог :) Ты бы на предложенных структурах предложил.
Ega23 (2006-09-22 11:56:00) [6]Стоп. Я фигню сморозил. По-моему, как-то это дело (IsNull) в условие JOIN можно добавить.
Сейчас попробую поискать, где-то что-то такое у меня встречалось...
zdm (2006-09-22 11:55:00) [7]Удалено модератором
ЮЮ (2006-09-22 11:52:00) [8]
> Видимо придется. А хотелось малой кровью - не трогать exe-
> шник.
А что во вьюхе нельзя hfpdt SELECT * From dbo.SomeUDF?
Уж извините, вьюхи не пользую, имея UDF :)
zdm (2006-09-22 11:51:00) [9]Удалено модератором
Stanislav (2006-09-22 11:50:00) [10]Ольга (22.09.06 11:39) [25]
Чем не устраевает - Stanislav © (22.09.06 11:24) [14]
ЮЮ (2006-09-22 11:49:00) [11]на крайний случай добавить это числ к каждой записи
SELECT
id_obj,
CASE Cnt WHEN o.ObjectsCnt THEN SumValue ELSE NULL END MySumValue
FROM (
SELECT
a.id_obj, dt,
SUM(b.Value) SumValue, COUNT(DISTINCT b.id_obj) Cnt
FROM
cls_objects a
LEFT OUTER JOIN obj_data b ON a.id_obj=b.id_obj
GROUP BY a.id_obj, dt
) gr
JOIN
(
SELECT COUNT(*) ObjectsCnt FROM cls_objects
) o
Ольга (2006-09-22 11:48:00) [12]
> [26]
Видимо придется. А хотелось малой кровью - не трогать exe-шник.
ЮЮ (2006-09-22 11:43:00) [13]а MS SQL какой?
Может не во вьюшку, а в UDF положить?
Ольга (2006-09-22 11:39:00) [14]
> ЮЮ © (22.09.06 11:27) [16]
Вот эту штуку некуда поставить:
DECLARE @ObjectsCnt int
SET @ObjectsCnt = SELECT COUNT(*) FROM cls_objects
Этот запрос - вьюшка
Val (2006-09-22 11:35:00) [15][17] Ольга (22.09.06 11:27)
>Оказывается конструкция..
ну да, смысл имеет IsNull(SUM(b.Value), 0) :)
Johnmen (2006-09-22 11:35:00) [16]
> sniknik © (22.09.06 11:32) [22]
> конечно не может, это ему просто хочется чтобы так было...
А-а-а...Понятно...
sniknik (2006-09-22 11:32:00) [17]> Не может быть! :)
конечно не может, это ему просто хочется чтобы так было...
ЮЮ (2006-09-22 11:30:00) [18]- Дохтур, почему меня все игнорируют?
ЮЮ (2006-09-22 11:28:00) [19]GROUP BY a.id_obj, dt
Stanislav (2006-09-22 11:27:00) [20]Johnmen © (22.09.06 11:20) [12]
Такое действительно бывает нужно, я допустим это применял для материальных спецификаций, пока все материалы не проценены сумма не должна читаться.
Странно почему нет стандартной фунции в SQL, хотя MSSQL выдает сообщение что NULL встречаются в агрегатной функции.