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

Откуда:
Сообщений: 4
Есть 2 таблицы
СотрудникиКартинка с другого сайта.ОтделыКартинка с другого сайта.
Необходимо создать процедуру, которая выводит суммарную премию отдела, по фамилии его начальника.
Т.е процедура будет с параметром. Вывод: одна строка, 2 столбца, фамилия начальника и суммарная премия
Сам я пробовал делать, но все что получилось ниже не правильно работает.
CREATE PROCEDURE ZASH
@N char(30) 
AS 
BEGIN 
SELECT С.Фамилия As Фамилия_начальника, SUM(С.Премия) 
FROM Сотрудники,Отделы 
LEFT OUTER JOIN Сотрудники С ON С.Код_отдела=Отделы.Код_отдела 
WHERE С.Фамилия = @N 
AND С.Код_отдела = Отделы.Код_отдела 
GROUP BY С.Фамилия 
END

Я новичок, и не очень соображаю что я делаю, прошу помощи.
Будуочень благодарен.
20 сен 18, 18:54    [21681300]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить процедуру с запросом  [new]
aleks222
Member

Откуда:
Сообщений: 850
CREATE PROCEDURE ZASH
@N char(30) 
AS 
BEGIN 

with p as ( select * from Сотрудники )
    , d as ( select * from Отделы )
  select @N As Фамилия_начальника
        , d.Название_отдела
        , Премия = ( select sum(Премия) from p as p1 where p1.Код_отдела = p.Код_отдела )
     from d inner join p on p.Код_отдела = d.Код_отдела and p.Табельный_номер = d.Табельный_номер_начальника_отдела
     where p.Фамилия = @N 


END
20 сен 18, 19:20    [21681316]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить процедуру с запросом  [new]
stelgi
Member

Откуда:
Сообщений: 4
aleks222
CREATE PROCEDURE ZASH
@N char(30) 
AS 
BEGIN 

with p as ( select * from Сотрудники )
    , d as ( select * from Отделы )
  select @N As Фамилия_начальника
        , d.Название_отдела
        , Премия = ( select sum(Премия) from p as p1 where p1.Код_отдела = p.Код_отдела )
     from d inner join p on p.Код_отдела = d.Код_отдела and p.Табельный_номер = d.Табельный_номер_начальника_отдела
     where p.Фамилия = @N 


END

Может я чего упустил, но данная конструкция не работает, пустые строки выводит независимо от вводимого параметра
20 сен 18, 21:58    [21681433]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить процедуру с запросом  [new]
court
Member

Откуда:
Сообщений: 1956
stelgi,

select
	[ФИО нач.отдела]		=@N 
	,[Сумма премии]			=sum(Премия)
from Сотрудники t
where t.Код_отдела=(select a.Код_отдела from Отделы a inner join Сотрудники b on a.Табельный_номер=b.Табельный_номер_начальника_отдела where a.Фамилия=@N)
21 сен 18, 09:44    [21681669]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить процедуру с запросом  [new]
Massa52
Member

Откуда:
Сообщений: 373
court,
Вроде полагается TOP (1) тут в SELECT
where t.Код_отдела=(select a.Код_отдела from Отделы a inner join Сотрудники b on a.Табельный_номер=b.Табельный_номер_начальника_отдела where a.Фамилия=@N)
21 сен 18, 09:53    [21681680]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить процедуру с запросом  [new]
court
Member

Откуда:
Сообщений: 1956
Massa52
court,
Вроде полагается TOP (1) тут в SELECT
where t.Код_отдела=(select a.Код_отдела from Отделы a inner join Сотрудники b on a.Табельный_номер=b.Табельный_номер_начальника_отдела where a.Фамилия=@N)
Нуу, если у ТС один и тот же нОчальник может "рулить" несколькими отделами, то - "да", ТОП 1 не помешает.
Правда, результат тогда будет "не очень" правильный :)

Так что IN наше всё !!1 :))
where t.Код_отдела IN (select a.Код_отдела from Отделы a inner join Сотрудники b on a.Табельный_номер=b.Табельный_номер_начальника_отдела where a.Фамилия=@N)
21 сен 18, 10:23    [21681715]     Ответить | Цитировать Сообщить модератору
 Re: Помогите составить процедуру с запросом  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
court,

автор
Нуу, если у ТС один и тот же нОчальник может "рулить" несколькими отделами, то - "да", ТОП 1 не помешает.
Правда, результат тогда будет "не очень" правильный :)

смовмещение нынче сплошь и рядом.
21 сен 18, 10:46    [21681754]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить