#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