首页 > 解决方案 > 根据组上的条件选择行

问题描述

我有一个下表,代码的值可以从 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

结果将只有产品 ID 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

标签: sqlsql-serversql-server-2008

解决方案


加强你的having条款:

SELECT ProductId
FROM @Product
GROUP BY ProductId
HAVING MIN(Code) >= 3 AND
       SUM(CASE WHEN Code = 9 THEN 1 ELSE 0 END) = 0

推荐阅读