Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
 Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Здравствуйте. Как можно сделать расчеты между таблицами,которые представлены на фото. То есть при выборе должности в карте сотрудника,она должна уменьшаться в таблице "должности"(скрин 2).
А в таблице вакансии в колонке "занято мест" должно выводится количество занятых должностей, и если нет свободных то в конке "свободно" будет соответствующий результат.
Так же буду не против,выслушать ваши варианты по таблицам

К сообщению приложен файл. Размер - 134Kb
14 май 17, 14:26    [20480051]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
fantanol
Здравствуйте. Как можно сделать расчеты между таблицами,которые представлены на фото. То есть при выборе должности в карте сотрудника,она должна уменьшаться в таблице "должности"(скрин 2).
А в таблице вакансии в колонке "занято мест" должно выводится количество занятых должностей, и если нет свободных то в конке "свободно" будет соответствующий результат.
Как обычно, SELECT INSERT UPDATE DELETE, какие тут у вас возникают сложности?
fantanol
Так же буду не против,выслушать ваши варианты по таблицам
А, так вам нужно спроектировать модель данных для этого?

С этого и надо начать, а не с "расчётов".

Задавайте вопрос в разделе "Проектирование", и, видимо, нужно будет рассказать немножко подробнее.
14 май 17, 15:01    [20480103]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

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

Я сделал чтобы отнималось количество должностей при добавлении сотрудника.

CREATE TRIGGER [dbo].[insActionСотрудник] ON [dbo].[Сотрудник] 
FOR INSERT
AS
UPDATE Штатное_расписание SET    Количество=Количество-isnull((select count(*) FROM INSERTED WHERE INSERTED.Должность=Штатное_расписание.id_Должность),0)


Как теперь сделать,чтобы при удалении сотрудника,количество должностей возвращалось?


Если это у меня получилось сделать,то с вакансиями вообще тупик. Есть какие предложения?
14 май 17, 15:55    [20480178]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
fantanol,

у вас уже готовая система или вы её только делаете?
можете ли вы менять код внутри системы (например, тот который заполняет эти ваши таблицы)?
добавление сотрудников в вашей системе строго по одному или может быть "пачкой"?
14 май 17, 16:44    [20480242]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Дедушка,

Только делаю программу. Сотрудника добавляю по одному
14 май 17, 17:01    [20480253]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
fantanol,

Для начала плотно пообщайтесь с отделом кадров про штатное расписание и штатно-должностную книгу. И посмотрите, как всё менялось с течением времени, на живых примерах. Особенно когда речь идёт про переводы сотрудников, внутреннее совместительство, размещение на менее 1 ставки итп. И сразу отпадёт желание указывать подразделение и должность непосредственно в карточке сотрудника.
14 май 17, 18:03    [20480351]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Сид,
Насчет этого поговорю. Но сейчас мне нужно разобраться с задачами выше
14 май 17, 18:31    [20480392]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
fantanol,

Дело в том, что после подробного разговора с кадровиками задача выше потеряет смысл, и нарисуется несколько другая задача, тк архитектура несколько усложнится.
14 май 17, 19:25    [20480481]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Сид
Member

Откуда: Москва
Сообщений: 305
fantanol,

Ещё одна подсказка: кадрам обязательно захочется, например, посмотреть ситуацию на определённый момент времени, статистику по принятым, уволенным и переведённым на другую должность за период, итп. Соответственно, для этого нужно, чтобы сотрудник занимал определённую штатную единицу в период с даты1 по дату2, в количестве N ставок. И ему же ничего не мешает параллельно светиться на другой штатной единице в качестве совместителя на 0,25 ставок. У нас я встречал врачей, которые совмещают в 3х отделениях. И все эти вещи завязываются на приказы, конечно.
Если эти моменты не предусмотреть сразу, то в итоге придётся всё переделывать)))
14 май 17, 19:41    [20480502]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

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

У меня не такая серьезная программа,как вы думаете) И текст задачи для меня уже сформировали. Я делаю то что уже мне задали. Осталось лишь то что я просил выше.
14 май 17, 19:47    [20480510]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
fantanol
Насчет этого поговорю. Но сейчас мне нужно разобраться с задачами выше
Хм, а зачем потом "разговаривать", если вы "разберётесь с задачами"?

Всё уже будет сделано неправильно, и придётся лепить говнокод на говнокоде, выполняя "задачи", пока всё не умрёт само.
fantanol
Я сделал чтобы отнималось количество должностей при добавлении сотрудника.
Эээ, штатное расписание не меняется при добавлении сотрудника.

Как вы это представляете?

В Штатное_расписание в записи "главный врач" было значение 0.
Добавили сотрудника на должность главного врача, стало 1
Добавили ещё 5 сотрудников на должность главного врача, стало 6

Так что ли?
Абсурд какой то.

Штатное расписание формируется независимо от найма сотрудников.

Должность сотрудников ставится в зависимости от свободных вакансий в штатном расписании.

А Таблица Вакансии, которая у вас нарисована, на самом деле не таблица, а результат запроса.

Триггер на таблицу Сотрудников нужно, но для проверки, что бы не назначить сотрудника на уже занятую должность.

Вот так будет правильно, по крайней мере для упрощённой учебной задачи.
14 май 17, 20:21    [20480545]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
alexeyvg
fantanol
Насчет этого поговорю. Но сейчас мне нужно разобраться с задачами выше
Хм, а зачем потом "разговаривать", если вы "разберётесь с задачами"?

Всё уже будет сделано неправильно, и придётся лепить говнокод на говнокоде, выполняя "задачи", пока всё не умрёт само.
fantanol
Я сделал чтобы отнималось количество должностей при добавлении сотрудника.
Эээ, штатное расписание не меняется при добавлении сотрудника.


Поговорю насчет того,какие данные я буду вводить о сотруднике.

автор
Как вы это представляете?

В Штатное_расписание в записи "главный врач" было значение 0.
Добавили сотрудника на должность главного врача, стало 1
Добавили ещё 5 сотрудников на должность главного врача, стало 6


Так они наоборот будут отниматься из штатного расписания,при добавлении сотрудника на эту должность.


автор
А Таблица Вакансии, которая у вас нарисована, на самом деле не таблица, а результат запроса.

Триггер на таблицу Сотрудников нужно, но для проверки, что бы не назначить сотрудника на уже занятую должность.

Вот так будет правильно, по крайней мере для упрощённой учебной задачи.


Насчет вакансий вы правы. Можете помочь составить запросы на сотрудника и вакансии?
14 май 17, 20:58    [20480580]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
fantanol
автор
Как вы это представляете?

В Штатное_расписание в записи "главный врач" было значение 0.
Добавили сотрудника на должность главного врача, стало 1
Добавили ещё 5 сотрудников на должность главного врача, стало 6


Так они наоборот будут отниматься из штатного расписания,при добавлении сотрудника на эту должность.
А, то есть вначале в штатном расписании для главного врача будет 1.
Потом, когда наймут человека, станет 0.
А что бы вывести правильное штатное расписание на экран, нужно будет прибавить к цифрам штатного расписания суммарные данные из сотрудников.

Оригинально :-)

Так, конечно, можно сделать, но это, извините, через ж....... :-)

fantanol
Можете помочь составить запросы на сотрудника и вакансии?
Вы скрипт создания таблиц приведите, что ли.
15 май 17, 02:41    [20480925]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
alexeyvg
...сегодня, 02:41
Не спится?
15 май 17, 09:10    [20481046]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
alexeyvg

fantanol
Можете помочь составить запросы на сотрудника и вакансии?
Вы скрипт создания таблиц приведите, что ли.

Связи я ставить не буду
+

create table Отдел
(
	id_Отдел bigint not null identity(1,1) Primary key,
	Наименование varchar(max) not null,		
)



create table Штатное_расписание
(
	id_Штатное_расписание bigint not null identity(1,1) Primary key,
	id_Должность varchar(max) not null,		
	Количество varchar(max) not null,
)



create table Должность
(
	id_Должность bigint not null identity(1,1) Primary key,
	Наименование varchar(max) not null,		
)


create table Вакансии
(
	id_Вакансии bigint not null identity(1,1) Primary key,
	Должность varchar(max) not null,		
	Необходимое_количество varchar(max) not null,
	Занято_мест varchar(max) not null,
	Свободно varchar(max) not null,
)





create table Сотрудник
(
	id_Сотрудник bigint not null identity(1,1) Primary key,
	Отдел varchar(max) not null,
	Должность varchar(max) not null,
	Фамилия varchar(max) not null,
	Имя varchar(max) not null,
	Отчество varchar(max) not null,
	Пол varchar(max) not null,
	Дата_рождения date not null,
	Место_рождения varchar(max) not null,
	Семейное_положение varchar(max) not null,
	Домашний_адрес varchar(max) not null,
	Мобильный_телефон varchar(max) not null,
	Дата_приема date not null,	 
)


create table Военнообязанные
(
	id_Военнообязанные bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Группа_учета varchar(max) not null,
	Категория_учета varchar(max) not null,
	Состав varchar(max) not null,
	Воинское_звание varchar(max) not null,
	Годность varchar(max) not null,
	Название_военкомата varchar(max) not null, 
)


create table Образование
(
	id_Образование bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Вид_образования varchar(max) not null,
	Вид_обучения varchar(max) not null,
)



create table Паспорт
(
	id_Паспорт bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Номер varchar(max) not null,
	Кем_выдан varchar(max) not null,	
	Дата_выдачи date not null,	
)




create table Семья
(
	id_Семья bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Фамилия varchar(max) not null,
	Имя varchar(max) not null,
	Отчество varchar(max) not null,
	Дата_рождения date not null,	
)

create table Аттестация
(
	id_Аттестация bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Дата date not null,	
	Решение_комиссии varchar(max) not null,
)


create table Квалификация
(
	id_Квалификация bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Дата date not null,	
	Вид_повышения_квалификации varchar(max) not null,
)



create table Отпуск 
(
	id_Отпуск bigint not null identity(1,1) Primary key,
	Сотрудник varchar(max) not null,
	Вид_отпуска varchar(max) not null,
	Дата_начала date,
	Дата_окончания date,
	Основание varchar(max),
)


15 май 17, 10:30    [20481264]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
fantanol
Количество varchar(max) not null,

Вы на лора-проктолога учились?
15 май 17, 10:35    [20481277]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Руслан Дамирович
fantanol
Количество varchar(max) not null,

Вы на лора-проктолога учились?

Да знаю я это,мне сейчас важно сделать расчеты.
15 май 17, 10:38    [20481285]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
fantanol
Да знаю я это,мне сейчас важно сделать расчеты.

Вам лень сделать все нормально. Почему же мы должны потратить свое время и помочь балбесу? Серьезно. Выкладывая такой код, вы нас оскорбляете.

Ну да ладно, может и правда, у вас там за спиной анальная кара нависла...

1. Вам не нужна таблица Вакансии - у вас есть Штатное расписание..
2. Вам нужна таблица Расписание - Сотрудник, id_Должность, Дата_Назначения, Дата_Снятия
create table Расписание
(
id_Сотрудник varchar(max) not null,	
id_Должность varchar(max) not null,		
Дата_Назначения varchar(max) not null,	
Дата_Снятия varchar(max) not null
)


Тогда ваша задача по списку Штатных Единиц
сводится к объединению двух запросов
SELECT
  id_Должность
  Количество
FROM
  Штатное_расписание

и
SELECT
  id_Должность
  Количество = COUNT(*)
FROM
  Расписание
WHERE
  Дата_Назначения <= GETDATE()
  AND Дата_Снятия > GETDATE()
15 май 17, 10:58    [20481354]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31364
fantanol
Можете помочь составить запросы на сотрудника и вакансии?
Что особенного в запросе на сотрудника?
Просто select * from Сотрудник
Ну, ещё можно сделать джойн на Должность, что бы вывести её название.

Запрос на вакансии, такой:
select d.Наименование as Должность, r.Количество as НеобходимоеКоличество, s.ЗанятоМест, r.Количество - s.ЗанятоМест as Свободно
from Должность d
    left join Штатное_расписание r
        on r.id_Должность = d.id_Должность
    left join (
        select id_Должность, count(*) as ЗанятоМест
        from Сотрудник
    ) as s on s.id_Должность = d.id_Должность


Разумеется, у сотрудника поле Должность должно быть id_Должность, ссылкой на должность.
fantanol
Руслан Дамирович
Вы на лора-проктолога учились?

Да знаю я это,мне сейчас важно сделать расчеты.
Поверьте, если сразу делать неправильно, то это не экономит время, а отнимает его.
Зачем писать varchar(max) для идентификаторов, это что, дольше, чем написать int?
15 май 17, 12:43    [20481647]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Руслан Дамирович
fantanol
Да знаю я это,мне сейчас важно сделать расчеты.

Вам лень сделать все нормально. Почему же мы должны потратить свое время и помочь балбесу? Серьезно. Выкладывая такой код, вы нас оскорбляете.

Ну да ладно, может и правда, у вас там за спиной анальная кара нависла...

1. Вам не нужна таблица Вакансии - у вас есть Штатное расписание..
2. Вам нужна таблица Расписание - Сотрудник, id_Должность, Дата_Назначения, Дата_Снятия
create table Расписание
(
id_Сотрудник varchar(max) not null,	
id_Должность varchar(max) not null,		
Дата_Назначения varchar(max) not null,	
Дата_Снятия varchar(max) not null
)


Тогда ваша задача по списку Штатных Единиц
сводится к объединению двух запросов
SELECT
  id_Должность
  Количество
FROM
  Штатное_расписание

и
SELECT
  id_Должность
  Количество = COUNT(*)
FROM
  Расписание
WHERE
  Дата_Назначения <= GETDATE()
  AND Дата_Снятия > GETDATE()
15 май 17, 13:19    [20481789]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Руслан Дамирович

1. Вам не нужна таблица Вакансии - у вас есть Штатное расписание..
2. Вам нужна таблица Расписание - Сотрудник, id_Должность, Дата_Назначения, Дата_Снятия


У меня в задании написано: штатное расписание,список вакансий
15 май 17, 13:21    [20481796]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Руслан Дамирович


SELECT
  id_Должность
  Количество
FROM
  Штатное_расписание

и
SELECT
  id_Должность
  Количество = COUNT(*)
FROM
  Расписание
WHERE
  Дата_Назначения <= GETDATE()
  AND Дата_Снятия > GETDATE()

в первом выводятся только должности,а количества нет.

на второе ругается: Сообщение 102, уровень 15, состояние 1, строка 3
Неправильный синтаксис около конструкции "=".




alexeyvg
Запрос на вакансии, такой:
select d.Наименование as Должность, r.Количество as НеобходимоеКоличество, s.ЗанятоМест, r.Количество - s.ЗанятоМест as Свободно
from Должность d
    left join Штатное_расписание r
        on r.id_Должность = d.id_Должность
    left join (
        select id_Должность, count(*) as ЗанятоМест
        from Сотрудник
    ) as s on s.id_Должность = d.id_Должность



Сообщение 8120, уровень 16, состояние 1, строка 1
Столбец "Сотрудник.id_Сотрудник" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
15 май 17, 13:37    [20481846]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
fantanol
...ругается...

Ну так мы тоже не потрудились свой код правильно написать. Не нравится?

P.S. После сборки доработать напильником.
15 май 17, 13:51    [20481881]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
fantanol
Member

Откуда:
Сообщений: 191
Что-то я запутался. Где тогда будет отниматься количество свободных должностей?
15 май 17, 14:28    [20481975]     Ответить | Цитировать Сообщить модератору
 Re: Запросы на подсчет должностей  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
fantanol
Что-то я запутался. Где тогда будет отниматься количество свободных должностей?

Перестань уже думать в рамках начальной задачи.
Тебе показали, как сделать то, что тебе нужно ПРАВИЛЬНО.
НеобходимоеКоличество = r.Количество,
s.ЗанятоМест,
Свободно = r.Количество - s.ЗанятоМест

Что из этого тебе непонятно?
15 май 17, 14:33    [20481984]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить