Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заставить SUM обрабатывать NULL [MSSQL]


Страницы:   1 2

Ольга ©   (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 встречаются в агрегатной функции.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо