Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 Заголовок сообщения: |
|
|
Скопируйте функцию с базы Кадровика.
И не морочте людям голову. |
|
Вернуться к началу |
|
|
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 Заголовок сообщения: |
|
|
спасибо. разберёмся |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|