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

Откуда:
Сообщений: 9
Доброе утро. В общем, вопрос такой. Есть Таблица Сотрудник, в ней столбец Стаж, Дата приема на работу и дата увольнения. Есть таблица Отпуск и в ней столбцы начало отпуска, конец отпуска, кол-во дней. вот думаю как сделать чтобы высчитывался стаж.
И вот как это еще вставть в столбец Стаж, чтобы было все как у людей.
17 дек 11, 13:01    [11781883]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Ну и как? Что-то надумали?
18 дек 11, 22:45    [11785858]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Какова связь между стажем и отпусками? Или я что-то пропустил?
19 дек 11, 09:01    [11786631]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Связи между стажем и отпусками нет. Соответсвенно у Вас есть дата приема на работу, есть GetDate() и есть DATEDIFF - дальше разберетесь!
19 дек 11, 09:04    [11786636]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
Антон Соловьев2
Доброе утро. В общем, вопрос такой. Есть Таблица Сотрудник, в ней столбец Стаж, Дата приема на работу и дата увольнения. Есть таблица Отпуск и в ней столбцы начало отпуска, конец отпуска, кол-во дней. вот думаю как сделать чтобы высчитывался стаж.
И вот как это еще вставть в столбец Стаж, чтобы было все как у людей.


Давно ещё реализовывал расчёт стажа путём вычитания дат в столбик (как это делают кадровики) на скуле 2000, в том же виде и привожу здесь, может, пригодится. Насколько я помню, после всех мучений данный метод был принят окончательно и работает уже года 4 без изменений.
Здесь функция возвращает стаж в виде (Y лет, M месяцев, D дней), а там уже под себя адаптируете)))

P.S. Надеюсь, здесь будут и более красивые (и в то же время верные) решения)))) Сейчас я бы написал эту функцию по-другому, но в лом.

CREATE  function getddiff (@fromdate datetime, @todate datetime)
returns varchar(100)
as
begin
declare @extdate datetime, @view_date datetime,
@y int, @m int, @d int, @sy int, @sm int, @sd int,
@ey int, @em int, @ed int, @dd int, @dm int, @time varchar(100)

select @extdate=dateadd(day,case when month(@todate) in (1,3,5,7,8,10,12) and day(@todate)=30 then 2 else 1 end,@todate)
select @ey=year(@extdate), @em=month(@extdate), @ed=day(@extdate),
@sy=year(@fromdate), @sm=month(@fromdate), @sd=day(@fromdate)

declare @tmp table (y int, m int, d int)

insert into @tmp
select 0,0,0

update @tmp
set
 @dd=case when @ed-@sd<0 then 1 else 0 end,
 @dm=case when @em-@sm-@dd<0 then 1 else 0 end,
 @d=@dd*30+@ed-@sd, @m=@dm*12+@em-@sm-@dd, @y=@ey-@sy-@dm,
y=@y, m=@m, d=@d

select @time=case when y=0 then '' else convert(varchar(10),y)+
	case when y%10=1 and y!=11 then ' год'
	when y%10 in (2,3,4) and y not in (12,13,14) then ' года'
	else ' лет' end+
	case when m+d>0 then ' ' else '' end
    end+
case when m=0 then '' else convert(varchar(10),m)+
	case when m=1 then ' месяц'
	when m in (2,3,4) then ' месяца'
	else ' месяцев' end
	+case when d>0 then ' ' else '' end
    end+
case when d=0 then '' else convert(varchar(10),d)+
	case when d%10=1 and d!=11 then ' день'
	when d%10 in (2,3,4) and d not in (12,13,14) then ' дня'
	else ' дней' end
    end
 from @tmp

return @time
end
20 дек 11, 13:04    [11795577]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Антон Соловьев2
Member

Откуда:
Сообщений: 9
ну в общем разобрался
а вот теперь не понимаю как сделать чтобы в столбез выдавалась формула
допустим у меня есть процедура добавления сторудника

Create PROCEDURE [dbo].[добСотр] 
@fam varchar(50), @imya varchar(50), @otch varchar(50),
 @strsvid varchar(10), @pol varchar(7), @datasost varchar(10),  
 @DR varchar(50), @mestoRozh varchar(100), @serianomer varchar(20), @datavid varchar(50),
@kemvid varchar(100), @adres varchar(100), @adresF varchar(100), @stag int,
@vidrab varchar(20), @tel varchar(20), 
@dataevol varchar(10),
@prikazpriem int,
@prikazuvol int,
@idotdel int, @iddolzh int, @idgrazhd int, @idSP int,
@b int
AS
insert into [Сотрудник]([Фамилия],[Имя],[Отчество],[№ страх.свид-ва],[пол],[дата составления],[дата рождения],
[место рождения],[серия/номер паспорта],[дата выдачи паспорта],[кем выдан],[адрес по паспорту],[адрес фактический],
[стаж работы],[вид работы],[№ телефона],[дата увольнения],[приказ на прием на работу],[приказ на увольнение],
[id-отдела],[id-должности],[id-гражданство],[id-семейное положение])
values(@fam, @imya, @otch ,
 @strsvid , @pol, @datasost ,  
 @DR, @mestoRozh , @serianomer, @datavid,
@kemvid, @adres, @adresF,@stag,
@vidrab , @tel, 
@dataevol,
@prikazpriem, @prikazuvol,
@idotdel, @iddolzh, @idgrazhd, @idSP
)

вот как вместо @stag записать формулу?
23 дек 11, 01:07    [11812342]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Антон Соловьев2
Member

Откуда:
Сообщений: 9
допустим вот эту
DATEDIFF (yy,[Сотрудник].[дата составления],GETDATE ( ))
23 дек 11, 01:08    [11812346]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Антон Соловьев2,
insert ... select -> BOL
23 дек 11, 01:37    [11812387]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Lasa
Member

Откуда: Canada
Сообщений: 81
А Вы просто создайте вычисляемое поле в таблице

CREATE TABLE [Сотрудник](
[СотрудникID] [int] IDENTITY(1,1) NOT NULL,
[дата составления] [date] NOT NULL,
[Стаж] As (DATEDIFF (yy,[дата составления],GETDATE ( )) )
)

Во-первых, не будут нарушаться принципы нормализации
Во-вторых, стаж будет правильный всегда, а то Вам ведь через год данные устареют :)

А если у Вас нет дотупа к таблице, то уберите вообще этот параметр @stag
Create PROCEDURE [dbo].[добСотр] 
@fam varchar(50), @imya varchar(50), @otch varchar(50),
 @strsvid varchar(10), @pol varchar(7), @datasost varchar(10),  
 @DR varchar(50), @mestoRozh varchar(100), @serianomer varchar(20), @datavid varchar(50),
@kemvid varchar(100), @adres varchar(100), @adresF varchar(100), 
@vidrab varchar(20), @tel varchar(20), 
@dataevol varchar(10),
@prikazpriem int,
@prikazuvol int,
@idotdel int, @iddolzh int, @idgrazhd int, @idSP int,
@b int
AS
insert into [Сотрудник]([Фамилия],[Имя],[Отчество],[№ страх.свид-ва],[пол],[дата составления],[дата рождения],
[место рождения],[серия/номер паспорта],[дата выдачи паспорта],[кем выдан],[адрес по паспорту],[адрес фактический],
[стаж работы],[вид работы],[№ телефона],[дата увольнения],[приказ на прием на работу],[приказ на увольнение],
[id-отдела],[id-должности],[id-гражданство],[id-семейное положение])
values(@fam, @imya, @otch ,
 @strsvid , @pol, @datasost ,  
 @DR, @mestoRozh , @serianomer, @datavid,
@kemvid, @adres, @adresF
,  DATEDIFF (yy,@datasost ,GETDATE ( )) 
,
@vidrab , @tel, 
@dataevol,
@prikazpriem, @prikazuvol,
@idotdel, @iddolzh, @idgrazhd, @idSP
23 дек 11, 04:16    [11812510]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про стаж работы и его расчет  [new]
Антон Соловьев2
Member

Откуда:
Сообщений: 9
спасибо большое всем
23 дек 11, 22:05    [11818226]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить