Сложный запрос SQL Server

#sql #sql-server #tsql #aggregate-functions

#sql #sql-сервер #tsql #агрегированные функции

Вопрос:

У меня возникла проблема с написанием сложного запроса. У меня есть следующая таблица (в качестве примера)

 fusionId | productId | departmentId
    1    |     1     |       1
    2    |     1     |       2
    3    |     2     |       1
    4    |     3     |       2
  

Я хочу запрос, в который я могу передать два departmentId ‘s (1,2), и чтобы запрос возвращал productId только если оба departmentId совпадают productId

Так, например, если бы я отправил departmentId 1 и 2, я бы получил результат

 productId
    1
  

Возможно ли это?

Ответ №1:

 SELECT productId 
FROM YourTable
WHERE departmentId IN (1,2)
GROUP BY productId 
HAVING COUNT(DISTINCT departmentId) = 2
  

Или

 SELECT productId 
FROM YourTable
WHERE departmentId = 1
INTERSECT
SELECT productId 
FROM YourTable
WHERE departmentId = 2
  

Ответ №2:

 Create Table Temporary 
(
    fusionId  int,
    productId  int,
    departmentId int,
)

insert into Temporary values (1,1,1),(2,1,2),(3,2,1),(4,3,2)

Select productId  from Temporary 
Where productId in (Select productId from Temporary where departmentId = 1) and departmentId =2
  

Ответ №3:

 SELECT productId 
FROM YourTable
WHERE departmentId IN (1,2)
GROUP bY productId 
HAVING COUNT(productId) > 1