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

Откуда: Санкт-Петербург
Сообщений: 10
Надо сделать скрипт, который ищет сотрудников, которые выполняли заказы только с однотипными компонентами, т.е. если в заказе только принтеры, то сотрудник выводится.
Придумал вот такой громадный ужас, кажется, что этот запрос неправильно работает. Посоветовали переделать с помощью EXISTS/NOT EXISTS, только как?

SELECT * FROM Сотрудник 
INNER JOIN Заказ ON Сотрудник.Код_сотрудника = Заказ.Код_сотрудника
WHERE Заказ.Номер_заказа  in 
(
SELECT Содержимое_заказа.Номер_заказа
FROM Содержимое_заказа
where Номер_заказа in
	(SELECT Номер_заказа 
	FROM Содержимое_заказа 
	GROUP BY Номер_заказа 
	HAVING COUNT(Номер_заказа)>1) and Код_компонента in
		(SELECT Компоненты.Код_компонента
		FROM Компоненты
		WHERE Компоненты.Тип_компонента in 
			(SELECT Компоненты.Тип_компонента
			FROM Компоненты
			GROUP BY  Компоненты.Тип_компонента
			HAVING COUNT(Компоненты.Тип_компонента)>1)) 
	OR Номер_заказа in 
			(SELECT Код_сотрудника FROM Заказ 
			WHERE Номер_заказа in 
				(SELECT Номер_заказа FROM Содержимое_заказа 
				GROUP BY Номер_заказа 
				HAVING COUNT(Номер_заказа)=1))
)
30 сен 19, 00:17    [21982232]     Ответить | Цитировать Сообщить модератору
 Re: Как переделать скрипт?  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
select
 *
from
 Сотрудник a
where
 not exists(
  select
   *
  from
   Заказ b join
   Содержимое_заказа c on c.Номер_заказа = b.Номер_заказа join
   Компоненты d on d.Код_компонента = c.Код_компонента
  where
   b.Код_сотрудника = a.Код_сотрудника
  group by
   b.Номер_заказа
  having
   count(distinct d.Тип_компонента) > 1
 );
30 сен 19, 09:52    [21982382]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить