powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подставить значение 0 если нет данных во второй таблице
25 сообщений из 54, страница 2 из 3
Подставить значение 0 если нет данных во второй таблице
    #39656242
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Отключенные мозги — вот это смешно.
А указанная рекомендация — это логично.
вы бесполезны
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656246
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B. это логично.

шо ж вы сразу с козырей то?
может, есть таки разумное объяснение, чем в данном конкретном случае один вариант "логичен", а второй - нет?
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656270
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительможет, есть таки разумное объяснение, чем в данном конкретном случае один вариант "логичен", а второй - нет?
В одном случае isnull применяется ко всем значениям группы, в другом случае isnull применяется только один раз в группе.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656275
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Посетительможет, есть таки разумное объяснение, чем в данном конкретном случае один вариант "логичен", а второй - нет?
В одном случае isnull применяется ко всем значениям группы, в другом случае isnull применяется только один раз в группе.
по вашему "логично" получать всегда сумму 0 когда есть хоть один NULL для необязательного параметра выборки? Чем хуже ваша логика, тем интереснее следствия :)
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656277
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Посетительможет, есть таки разумное объяснение, чем в данном конкретном случае один вариант "логичен", а второй - нет?
В одном случае isnull применяется ко всем значениям группы, в другом случае isnull применяется только один раз в группе.В каком случае результат функции SUM() будет равен NULL?
Что будет, если некоторые из слагаемых в SUM() будут равны NULL?
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656318
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapЧто будет, если некоторые из слагаемых в SUM() будут равны NULL?
null при суммировании игнорируется. Если все слагаемые null, то и сумма будет null. В этом случае isnull(sum(fld),0)=0.
Если использовать sum(isnull(fld,0)), то результат будет такой же.
Какая-то разница (и какой-то смысл) мог быть при count, но не при sum.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656324
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мдяб Alibek B. вы планы сравнивали (не визуально)?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 select  ISNULL(sum(x.i),10) 
  from (
    select i = 10
	union all
	select i =20
	union all
	select i= cast(NULL as int)
  ) x

 
  select  sum(isnull(x.i, 10))
  from (
    select i = 10
	union all
	select i =20
	union all
	select i= cast(NULL as int)
  ) x
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656335
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.iapЧто будет, если некоторые из слагаемых в SUM() будут равны NULL?
null при суммировании игнорируется. Если все слагаемые null, то и сумма будет null. В этом случае isnull(sum(fld),0)=0.
Если использовать sum(isnull(fld,0)), то результат будет такой же.
Какая-то разница (и какой-то смысл) мог быть при count, но не при sum.Не просто проигнорируются.
Вернётся предупреждение, что значения NULL были проигнорированы.
И это сообщение не получится подавить.
Некоторые приложения такого рода сообщения трактуют как ошибку в запросе.
Мне не раз приходилось сталкиваться с этим. Поэтому всегда предпочитаю применять ISNULL(Field,0) внутри SUM().
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656347
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критерий истины — практика.
http://sqlfiddle.com/#!18/bf804/1/0
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656360
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapНе просто проигнорируются.
Вернётся предупреждение, что значения NULL были проигнорированы.
И это сообщение не получится подавить.
Некоторые приложения такого рода сообщения трактуют как ошибку в запросе.

ИМХО слишком условная причина.
Я с MSSQL работал достаточно давно, но мне сложно представить, чтобы информационные сообщения клиент интерпретировал как ошибку запроса.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656384
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot iap]Alibek B.пропущено...
Вернётся предупреждение, что значения NULL были проигнорированы.
И это сообщение не получится подавить.


эммм
Код: sql
1.
set ansi_warnings off


отменили?

Alibek B.Критерий истины — практика.


и в чем же истина заключается в вашем примере
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656390
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Критерий истины — практика.
http://sqlfiddle.com/#!18/bf804/1/0
и вы своей практикой в итоге получите

Код: sql
1.
2.
3.
4.
5.
WITH A(A,B) AS (SELECT CAST(NULL as int),1 UNION ALL SELECT NULL,1 )
SELECT 
	ISNULL(SUM(a+ b),0),
	SUM(ISNULL(a,0)) + SUM(ISNULL(b,0))
FROM A;
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656393
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительи в чем же истина заключается в вашем примере
sum(isnull(fld,0)) и isnull(sum(fld),0) дают одинаковый результат для любых int.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656396
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKи вы своей практикой в итоге получите
Код: sql
1.
2.
3.
4.
5.
WITH A(A,B) AS (SELECT CAST(NULL as int),1 UNION ALL SELECT NULL,1 )
SELECT 
	ISNULL(SUM(a+ b),0),
	SUM(ISNULL(a,0)) + SUM(ISNULL(b,0))
FROM A;


На какие только изощрения не идут люди, лишь бы свою проявленную глупость скрыть.
Откуда в примере взялась сложение двух полей?
Если isnull(sum(a+b),0), то почему не sum(isnull(a+b),0)?
Не нужно так сову на глобус натягивать, ей больно.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656397
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.TaPaKи вы своей практикой в итоге получите
Код: sql
1.
2.
3.
4.
5.
WITH A(A,B) AS (SELECT CAST(NULL as int),1 UNION ALL SELECT NULL,1 )
SELECT 
	ISNULL(SUM(a+ b),0),
	SUM(ISNULL(a,0)) + SUM(ISNULL(b,0))
FROM A;


На какие только изощрения не идут люди, лишь бы свою проявленную глупость скрыть.
Откуда в примере взялась сложение двух полей?
Если isnull(sum(a+b),0), то почему не sum(isnull(a+b),0)?
Не нужно так сову на глобус натягивать, ей больно.
вы есполезны
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656398
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посетительотменили?
Код: sql
1.
SET ANSI_WARNINGS ON;

обязательно во многих случаях.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656400
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.лишь бы свою проявленную глупость скрытьСам-то умником себя считаешь, а?
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656401
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.sum(isnull(fld,0)) и isnull(sum(fld),0) дают одинаковый результат для любых int.
но разный план исполнения
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656403
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxно разный план исполнения
Да. И почти наверняка для последнего случая план будет лучше.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656408
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Maxxно разный план исполнения
Да. И почти наверняка для последнего случая план будет лучше.
1. ето легко проверяеться
2. вы не правы
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656413
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня MSSQL нет, чтобы проверить.
И мне сложно представить, что выгоднее N раз вычислить функцию внутри группы, чем 1 раз снаружи группы.
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656418
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ну так Вы балабол батенька, больше вопросов не имею
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656435
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxxно разный план исполнения
Кстати, а почему?
Разве выражения в select хоть как-то влияют на план выполнения?
Во всяком случае в Oracle и MySQL нет никакой разницы между sum(nvl) или nvl(sum).
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656444
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,
1. как сказано - план, или по вашему "игнорирует" по волшебству?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
--SET SHOWPLAN_ALL ON     select  ISNULL(sum(x.i),0)     from (      select i = 10   union all   select i =20   union all   select i= cast(NULL as int)    ) x
  |--Compute Scalar(DEFINE:([Expr1005]=isnull([Expr1004],(0))))
       |--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1006]=(0) THEN NULL ELSE [Expr1007] END))
            |--Stream Aggregate(DEFINE:([Expr1006]=COUNT_BIG([Union1003]), [Expr1007]=SUM([Union1003])))
                 |--Constant Scan(VALUES:(((10)),((20)),(NULL)))
 select  sum(isnull(x.i, 0))    from (      select i = 10   union all   select i =20   union all   select i= cast(NULL as int)    ) x
  |--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1005]=(0) THEN NULL ELSE [Expr1006] END))
       |--Stream Aggregate(DEFINE:([Expr1005]=Count(*), [Expr1006]=SUM(isnull([Union1003],(0)))))
            |--Constant Scan(VALUES:(((10)),((20)),(NULL)))



2.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
WITH A(B) AS
(
SELECT 1
)
SELECT
        SUM(ISNULL(B,0)) AS Sales,
        ISNULL(SUM(B),0) AS Sales
FROM     A    
WHERE 1=0



3. Warning который спамит во все стороны, для джобов это отдельное веселье

4. Потенциально вы всегда должны помнить что же выбрать ISNULL(SUM()) или SUM(ISNULL()) из за того что внетри суммы.

5. Вы бесполезны
...
Рейтинг: 0 / 0
Подставить значение 0 если нет данных во второй таблице
    #39656455
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKВы бесполезны
Не нервничайте, корвалол попейте.
Ляпнули глупость публично, не хватило духу признать, начали юлить.
Бывает. Видны задатки журналиста.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подставить значение 0 если нет данных во второй таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]