Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с функцией  [new]
sk187
Member

Откуда:
Сообщений: 5
Доброго времени суток, подскажите пожалуйста, как поправить функцию. Необходимо написать функцию, выдающую фонд ЗП подразделения. В фонд входит оклад и индивидуальные надбавки сотрудников.
То есть вводится номер подразделения и выдается данная сумма. Оклад и надбавки находятся в разных таблицах соответственно. НО проблема со вторым SUM, выдает ошибку, можно ли вообще так через "+" добавлять "SUM"? или может другой тип функции нужно использовать?
create function fond(@kod int)
returns table 
AS
return 
select
Фонд= SUM(Оклад)from ШТАТНОЕ_РАСПИСАНИЕ where ШТАТНОЕ_РАСПИСАНИЕ.КодПодразделения = @kod 
+ SUM (Надбавка) from РАБОТА where РАБОТА.КодПодразделения = @kod
24 ноя 19, 18:43    [22024080]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
sk187
или может другой тип функции нужно использовать?
И другой тип функции нужен, и запросы нужно учиться писать.

В запросах поэкспериментируйте со скобочками в подзапросах, а функция вам нужна скалярная.
24 ноя 19, 19:02    [22024086]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
create function fond(@kod int)
returns table 
AS
return 
select
 Фонд =
  (select isnull(SUM(Оклад), 0)from ШТАТНОЕ_РАСПИСАНИЕ where ШТАТНОЕ_РАСПИСАНИЕ.КодПодразделения = @kod) +
  (select isnull(SUM(Надбавка), 0) from РАБОТА where РАБОТА.КодПодразделения = @kod)
24 ноя 19, 19:28    [22024097]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
invm,

SUM игнорирует null-ы можно не делать дополнительной проверки с подстановкой.
24 ноя 19, 20:09    [22024119]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
ShIgor
SUM игнорирует null-ы можно не делать дополнительной проверки с подстановкой.
Читайте что такое скалярный агрегат и что будет возвращено для SUM, если нет строк, удовлетворяющих критериям отбора.
24 ноя 19, 20:18    [22024131]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2344
invm,

можно ссылку на документацию от MS, не нахожу где поподробнее почитать..
умом-то понимаю, что сумма по отсутствующему набору будет нулл и это вроде логично, а вот то что если записи есть, но все значения в этом поле будут null, то результат тоже будет null не совсем понятно.
24 ноя 19, 21:45    [22024173]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
sk187
Member

Откуда:
Сообщений: 5
invm,
Спасибо, заодно узнал полезную информацию по ISNULL и SUM
24 ноя 19, 22:40    [22024192]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с функцией  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
ShIgor
умом-то понимаю, что сумма по отсутствующему набору будет нулл и это вроде логично, а вот то что если записи есть, но все значения в этом поле будут null, то результат тоже будет null не совсем понятно
В принципе первого же достаточно, что бы писать isnull

А второе - явного описания я не нашёл, но в принципе, если значений вообще нет, то и суммы нет.
24 ноя 19, 23:49    [22024205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить