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

Помогите пожалуйста решить:
Есть 3 таблицы:
1) Сотрудник
Код_сотрудника Им'я Код_специализации

1 A 1

2 B 2

...
N N 1


2) Проблема
Код_проблемы Код_специализации количество_человек

123

112

3) Ремонт
Код_ремонта Код_сотрудника

12

13

...
1n

Как сделать запрос на добавление сотрудников в таблицу ремонт. Если например я вибираю проблему (Код 1) то мне нужно из таблицы сотрудник вибрать трьох (количиство_человек) с кодом специализации 2 и двох (количиство_человек) с кодом специализации 1 и вставить в таблицу ремонт.
4 фев 14, 22:44    [15519623]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записей  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Спасибо
мне нужно из таблицы сотрудник вибрать трьох (количиство_человек) с кодом специализации 2 и двох (количиство_человек) с кодом специализации 1
Допустим, есть 10 сотрудников специализации 1 и 10 специализации 2. По каким критериям нужно из них выбрать 3-х и 2-х соответственно?
4 фев 14, 23:10    [15519716]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записей  [new]
Спасибо
Guest
Нужно выбрать любых 3-х с 10 и 2-х с 10. Допустим ето 20 свободных человек, и им можна назначать роботу. Можна первые три одной специальности и два другой.
4 фев 14, 23:29    [15519767]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записей  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
with x as
(
 select
  Код_сотрудника, Код_специализации,
  row_number() over (partition by Код_специализации order by newid()) as rn
 from
  Сотрудники
 where
  <Критерий, определящий незанятость сотрудника>
)
insert into Ремонт
 (Код_ремонта, Код_сотрудника)
select
 1, x.Код_сотрудника
from
 Проблема t join
 x on x.Код_специализации and x.rn <= t.количество_человек
where
 t.Код_проблемы	= 1;
4 фев 14, 23:59    [15519858]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записей  [new]
SERG1257
Member

Откуда:
Сообщений: 2752
http://msdn.microsoft.com/ru-ru/library/ms189463.aspx
insert into repair
select top 3 * from emp_table where spec=2
union all 
select top 2 * from emp_table where spec=1

но лучше все же добавить order by
4 фев 14, 23:59    [15519859]     Ответить | Цитировать Сообщить модератору
 Re: Добавление записей  [new]
Спасибо
Guest
SERG1257
http://msdn.microsoft.com/ru-ru/library/ms189463.aspx
insert into repair
select top 3 * from emp_table where spec=2
union all 
select top 2 * from emp_table where spec=1

но лучше все же добавить order by


Я так и пробовал раньше select top(select количество_человек from проблема Where код_специализации=(..))
Но если один с подзапросов возвращает пустое значение то запросы обединения не срабативают.


Спасибо большое всем. Возпользуюсь решение invm думаю самое оно. Вот только у меня ещо маленький вопрос. Если у меня например десять разных проблем (разные специализации и количество сотрудников), можно ли всех сотрудников с етих проблем добавить одним запросом в таблицу ремонт? Where код_проблемы in 1,2,3..
5 фев 14, 01:30    [15520089]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить