Select 行基于组的条件
Select rows based on condition on group
我有一个关注 table,代码的值可以从 1 到 10。我想 select 只有代码值大于或等于 3 的产品 &它不应该分配 code = 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 未被 select 编辑,因为它分配了代码 2
494948 未被 select 编辑,因为它的代码为 9
我在下面写了对 select 代码大于或等于 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
从源头排除产品,这应该 return 正确的结果集。我使用 where 子句完成此操作,该子句选择代码为 9 的所有 productid 值。这样,外部结果集是所有大于 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;
增强您的 having
子句:
SELECT ProductId
FROM @Product
GROUP BY ProductId
HAVING MIN(Code) >= 3 AND
SUM(CASE WHEN Code = 9 THEN 1 ELSE 0 END) = 0
我有一个关注 table,代码的值可以从 1 到 10。我想 select 只有代码值大于或等于 3 的产品 &它不应该分配 code = 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 未被 select 编辑,因为它分配了代码 2 494948 未被 select 编辑,因为它的代码为 9
我在下面写了对 select 代码大于或等于 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
从源头排除产品,这应该 return 正确的结果集。我使用 where 子句完成此操作,该子句选择代码为 9 的所有 productid 值。这样,外部结果集是所有大于 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;
增强您的 having
子句:
SELECT ProductId
FROM @Product
GROUP BY ProductId
HAVING MIN(Code) >= 3 AND
SUM(CASE WHEN Code = 9 THEN 1 ELSE 0 END) = 0