Выберите строки на основе условия по группе - PullRequest
0 голосов
/ 20 июня 2019

У меня есть следующая таблица со значениями кода, которые могут быть от 1 до 10. Я хочу выбирать продукт, только если он имеет значение кода больше или равно 3 и ему не должен назначаться код = 9.

ProductId   Code
844558      3
844558      3.5
844558      4
296013      2
296013      3
494948      3.5
494948      4
494948      9
392991      4
392991      9.5

Результат будет иметь только идентификатор продукта 844558 и 392991. 296013 не выбран, потому что ему присвоен код 2 494948 не выбран, так как имеет код 9

Я написал запрос ниже, чтобы выбрать записи с кодом больше или равным 3. Как исключить продукты с кодом = 9

Declare @Product Table(ProductId INT, Code DECIMAL(10,2))

INSERT INTO @Product(ProductId, Code)
Select 844558,3
UNION
Select 844558,3.5
UNION
Select 844558,4
UNION
Select 296013,2
UNION
Select 296013,3
UNION
Select 494948,3.5
UNION
Select 494948,4
UNION
Select 494948,9
UNION
Select 392991,4
UNION
Select 392991,9.5 


SELECT ProductId
FROM @Product
WHERE Code <> 9
GROUP BY ProductId
HAVING MIN(Code) >= 3

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Улучшите ваше having предложение:

SELECT ProductId
FROM @Product
GROUP BY ProductId
HAVING MIN(Code) >= 3 AND
       SUM(CASE WHEN Code = 9 THEN 1 ELSE 0 END) = 0
0 голосов
/ 20 июня 2019

Исключить продукт в источнике, и это должно вернуть правильный набор результатов. Я сделал это, используя предложение where, которое выбирает все значения productid, где код равен 9. Таким образом, внешний набор результатов - это все коды больше 3, а внутренний набор результатов исключает все, что имеет код 9.

Declare @Product Table(ProductId INT, Code DECIMAL(10,2))

INSERT INTO @Product(ProductId, Code)
Select 844558,3
UNION
Select 844558,3.5
UNION
Select 844558,4
UNION
Select 296013,2
UNION
Select 296013,3
UNION
Select 494948,3.5
UNION
Select 494948,4
UNION
Select 494948,9
UNION
Select 392991,4
UNION
Select 392991,9.5 


SELECT ProductId
FROM @Product
WHERE ProductID not in (select ProductID from @product where Code=9)
GROUP BY ProductId
HAVING MIN(Code) >= 3;

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...