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

Средний возраст дубль 2

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
zeha_t



Зарегистрирован: 30.03.2012
Сообщения: 25

СообщениеДобавлено: Чт Апр 26, 2012 16:29    Заголовок сообщения: Средний возраст дубль 2 Ответить с цитатой

Сделал запрос вида

select Staff.ФИО, Staff.Должность, Units.[Название подразделения], Info.[Дата рождения]
from Staff, Units, Info
where Staff.[Код подразделения]=Units.[Код подразделения]
and Staff.[Код сотрудника]=Info.[Код сотрудника]
and Staff.[Дата приёма]<=getdate() and Staff.[Дата увольнения]>GETDATE()

Создал процедуру вида

USE [T]
GO
/****** Object: StoredProcedure [dbo].[Возраст сотрудников] Script Date: 04/26/2012 15:57:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Возраст сотрудников]
-- Add the parameters for the stored procedure here
@Age int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
select Info.ФИО, Info.[Дата рождения],

'Возраст'=datediff(yy, Info.[Дата рождения], getdate() )
from Info
where datediff(yy, Info.[Дата рождения], getdate())>@Age
END

Теперь как всё это слепить воедино, чтоб в итоге запрос выводил средний возраст работающих сотрудников по подразделениям

Help me please...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Чт Апр 26, 2012 17:52    Заголовок сообщения: Ответить с цитатой

Код:
and Staff.[Дата приёма]<=getdate() and Staff.[Дата увольнения]>GETDATE()

Я бы эту строчку написал вот так:
Код:
AND getdate() BETWEEN Staff.[Дата приёма] AND Staff.[Дата увольнения]

Дата увольнения сотрудника - его рабочий день, a between берет значения "включительно". Так читабельнее и проще.

Код:
-- Insert statements for procedure here
select Info.ФИО, Info.[Дата рождения],

Зачем нужна эта строка?

Код:
where datediff(yy, Info.[Дата рождения], getdate())>@Age

И вот эта зачем?

Ваша функция не отслеживает был ли день рождения в текущем году или нет, то есть данные она не всегда будет давать правильные.

Стандартная функция dbo.prfn_age() отлично считает возраст, зачем вам еще что-то?

Вам нужны средние возраста сотрудников в каком разрезе?
-должности
-подразделения
-категории
-пол
-???
[/code]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zeha_t



Зарегистрирован: 30.03.2012
Сообщения: 25

СообщениеДобавлено: Чт Апр 26, 2012 18:13    Заголовок сообщения: Ответить с цитатой

Mike писал(а):
Код:
and Staff.[Дата приёма]<=getdate() and Staff.[Дата увольнения]>GETDATE()

Я бы эту строчку написал вот так:
Код:
AND getdate() BETWEEN Staff.[Дата приёма] AND Staff.[Дата увольнения]

Дата увольнения сотрудника - его рабочий день, a between берет значения "включительно". Так читабельнее и проще.

Код:
-- Insert statements for procedure here
select Info.ФИО, Info.[Дата рождения],

Зачем нужна эта строка?

Код:
where datediff(yy, Info.[Дата рождения], getdate())>@Age

И вот эта зачем?

Ваша функция не отслеживает был ли день рождения в текущем году или нет, то есть данные она не всегда будет давать правильные.

Стандартная функция dbo.prfn_age() отлично считает возраст, зачем вам еще что-то?

Вам нужны средние возраста сотрудников в каком разрезе?
-должности
-подразделения
-категории
-пол
-???
[/code]


Нужны средние возраста в резрезе по подразделеним, т.е. вывод подразделения - столбец 1 и второй столбец средний возраст сотрудников в нём.

Стандартная функция dbo.prfn_age() работает то прекрасно но на боевой базе LITE, а у меня её нет, поэтому я тренируюсь на своей созданой мною и поэтому создал свою процедуру по Возрасту

Строка where datediff(yy, Info.[Дата рождения], getdate())>@Age - это просто экспериментировал с процедурой, в данном случае при выполнении процедуры я могу выводить возраст с определённого параметра, ну к примеру старше 20 или 30...

с этим AND getdate() BETWEEN Staff.[Дата приёма] AND Staff.[Дата увольнения] всё понятно, исправлюсь
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RVV
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 14.01.2010
Сообщения: 449

СообщениеДобавлено: Чт Апр 26, 2012 19:01    Заголовок сообщения: Ответить с цитатой

"но на боевой базе LITE, а у меня её нет"

а как тогда Кадровик работает? Вы где ее искали?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zeha_t



Зарегистрирован: 30.03.2012
Сообщения: 25

СообщениеДобавлено: Чт Апр 26, 2012 21:13    Заголовок сообщения: Ответить с цитатой

RVV писал(а):
"но на боевой базе LITE, а у меня её нет"

а как тогда Кадровик работает? Вы где ее искали?


Нет вы меня не поняли...
Кадровик то работает...
Но у меня задача стоит не в том чтобы написать запрос на базе Lite, на ней нет проблем, да и к чему писать запрос если всё можно сделать через Произвольные списки.
Я для себя хочу понять как создать данный запрос но для начала на своей базе, а не на lite - е, поэтому и создал свою процедуру и запрос,

короче проще говоря чтобы понять как создавать и творить на lite я тренируюсь на своей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
RVV
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 14.01.2010
Сообщения: 449

СообщениеДобавлено: Пт Апр 27, 2012 09:47    Заголовок сообщения: Ответить с цитатой

Скопируйте функцию с базы Кадровика.
И не морочте людям голову. Evil or Very Mad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Пт Апр 27, 2012 09:51    Заголовок сообщения: Ответить с цитатой

Так вы сделайте копию "боевой базы", назовите ее Lite_Test и делайте с ней все, что хотите. В копии Вам будет доступно все, что доступно на "боевой".

Если применимо к стандартным таблицам босса. то ваш запрос выглядит примерно так:
Код:
SELECT
    Structs.Struct_name
   ,AVG(dbo.prfn_age(Card.Date_birth,getdate())) as Average_Age
FROM Structs, Card, People, PR_Current
WHERE Card.auto_card = People.auto_card
   AND People.pId = PR_Current.pId
   AND Structs.Struct_code = PR_Current.Code_Struct_name
   AND getdate() BETWEEN PR_Current.Date_trans AND PR_Current.Date_depart
   AND getdate() BETWEEN People.in_date AND People.out_date
GROUP BY Structs.Struct_name;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zeha_t



Зарегистрирован: 30.03.2012
Сообщения: 25

СообщениеДобавлено: Пт Апр 27, 2012 10:37    Заголовок сообщения: Ответить с цитатой

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

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


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