Problem
我需要有条件地筛选一组记录.过滤数据的规则是:通过ProductNumber查找重复值,并且它们至少需要有两个ProductType(1和5)
Example
产品
ProductNumber | ProductType | ProductName |
---|---|---|
A-000217 | 1 | stuff 13 |
A-000217 | 5 | stuff 13 |
A-000086 | 5 | stuff 2 |
A-000086 | 5 | stuff 2 |
A-001229 | 1 | stuff 20 |
A-001146 | 5 | stuff 21 |
A-001146 | 1 | stuff 21 |
这应该是输出
产品(已过滤)
ProductNumber | ProductType | ProductName |
---|---|---|
A-000217 | 1 | stuff 13 |
A-000217 | 5 | stuff 13 |
A-001146 | 5 | stuff 21 |
A-001146 | 1 | stuff 21 |
- 产品A-000086已被排除,因为两个记录都是类型5.
- 产品A-001229只有1条记录,因此必须将其排除.
我try 了这个代码,但它没有像预期的那样工作.
CREATE TABLE #Product(
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductNumber] [varchar](60) NOT NULL,
[ProductType] [int] NOT NULL,
[ProductName] [varchar](60) NOT NULL,
PRIMARY KEY(Id)
);
INSERT INTO [#Product]([ProductNumber], [ProductType], [ProductName])
VALUES('A-000217', 1, 'stuff 13')
,('A-000217', 5, 'stuff 13')
,('A-000086', 5, 'stuff 2')
,('A-000086', 5, 'stuff 2')
,('A-001229', 1, 'stuff 20')
,('A-001146', 5, 'stuff 21')
,('A-001146', 1, 'stuff 21')
--Filter data
; WITH CTE AS (
SELECT
ProductNumber
, ProductType
, ProductName
, COUNT(ProductType) OVER(PARTITION BY ProductNumber) AS [RowNumber]
FROM #Product
)
SELECT * FROM CTE WHERE RowNumber > 1
结果:
我的代码有什么问题?或者,我如何才能实现这种方法?