Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Уволенные за 12 последних месяцев

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: АКП (Анализ кадровых процессов)
Предыдущая тема :: Следующая тема  
Автор Сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Чт Июн 05, 2014 17:01    Заголовок сообщения: Уволенные за 12 последних месяцев Ответить с цитатой

Есть тиражный отчет Пример движение кадров. В нём показатель уволенных.
Мне нужно создать отчет, в котором уволенные будут считаться не просто за выбранный период (выбирать можно будет только год), а по такому условию:
Если год из getdate() равен году, указаному в диалоге, то
{
посчитать количество уволенных за последний полный месяц перед getdate и одиннадцать месяцев, предшествующих последнему полному месяцу.
Например: сегодня 05.06.2014. Запускаю отчет и указываю за 2014 год - уволенные должны собраться за июнь 2013 - май 2014.
}
Иначе
{
просто количество уволенных за год указанный в диалоге. Например если сегодня указали 2013, то нужно просто посчитать уволенных в 2013 году.
}
Скажите, как реализовать такой показатель?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Joenka



Зарегистрирован: 08.11.2013
Сообщения: 77
Откуда: Moscow

СообщениеДобавлено: Пт Июн 06, 2014 09:07    Заголовок сообщения: Ответить с цитатой

if year(getdate())=@Dialog_var:1 // Dialog_var выбираем в диалоге.
select .....
from people p
inner join .....
where
p.out_date between convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(dateadd(year,-1,getdate())) as varchar(4)),104)
and
convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(getdate()) as varchar(4)),104)-1 //
else
select .....
from people p
inner join .....
where
year(p.out_date) = year(@Dialog_var:1)

Ну примерно как то так.

Причем если вы хотите исключить повторные увольнения (человек принят, уволен, потом опять принят), то можно в принципе брать расчет по distinct auto_card.

К тому же если нужно считать только уволенных, т.е. можут случится так что он уволен в 2013, но потом снова пришел и сейчас работает и таких считать не надо, то еще условие нужно добавить, что на данный момент или на момент позднее периода расчета человек не работает в организации.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
rebel25
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 06.10.2008
Сообщения: 578
Откуда: Москва

СообщениеДобавлено: Пт Июн 06, 2014 17:22    Заголовок сообщения: Ответить с цитатой

Спасибо, но к сожелению программа не позволила писать в поле селекта для показателя if и Dialog_var:1. Если есть работающий текст, который можно вставить туда, прошу показать.
Сейчас я решил выходить из положения так: создам один проект для текущего года (там вообще не будет временного измерения) и другой для прошлых лет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Joenka



Зарегистрирован: 08.11.2013
Сообщения: 77
Откуда: Moscow

СообщениеДобавлено: Пн Июн 09, 2014 08:51    Заголовок сообщения: Ответить с цитатой

rebel25 писал(а):
Спасибо, но к сожелению программа не позволила писать в поле селекта для показателя if и Dialog_var:1. Если есть работающий текст, который можно вставить туда, прошу показать.
Сейчас я решил выходить из положения так: создам один проект для текущего года (там вообще не будет временного измерения) и другой для прошлых лет.


Напишите вот так (а уж сам ыид и колонки и селекты правьте как Вам нужно):

STABLE @XName Select year(DATEADD(year,-2,getdate())) ,year(DATEADD(year,-2,getdate()));

alias _dlgresource={
(0,0,460,120,0);
e,(50,0,340,20, 0x28),'Год:',(50,20,340,20,0x4),1,
{Select year(DATEADD(year,-2,getdate())) ,year(DATEADD(year,-2,getdate()))
union all
select year(DATEADD(year,-1,getdate())) ,year(DATEADD(year,-1,getdate()))
union all
Select
Year(Getdate()),Year(Getdate())
},0,2,1;
};
DIALOG @XName,,'~Уволенные за год';
if _Result <> 10 then {
DESTROY @XName;
error;
};

if year(getdate())=@XName:1 then
{
stable @su
select c1.full_name,
convert(varchar(10),p.out_date,104)
from people p _hintbrowser
inner join card c1 _hintbrowser on c1.auto_card=p.auto_card
where
p.out_date between convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(dateadd(year,-1,getdate())) as varchar(4)),104)
and
convert(datetime,'01.'+Right('0'+month(getdate()),2)+'.'+cast(year(getdate()) as varchar(4)),104)-1;
}
else
{
stable @su
select c1.full_name,
convert(varchar(10),p.out_date,104)
from people p _hintbrowser
inner join card c1 _hintbrowser on c1.auto_card=p.auto_card
where
year(p.out_date) = year(@XName:1);
};

BROWSER @su;
DESTROY @su;


Alias _Result = -1;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: АКП (Анализ кадровых процессов) Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU