0

我有一个用于跟踪 Bin 数据库的 PartNumber 信息的表。每个 Bin 可以有多个 Partnumber,但必须至少将一个 PartNumber 标记为该 Bin 的 Primary。在我的 PartNumbers 表中,有许多记录从未被识别为主要记录,我需要能够识别它们,以便在能够执行业务规则之前清理数据。我查看了 OVER(PARTION BY) 但我无法弄清楚如何获取那些至少没有一个 PartNumber 标记为主要的记录。

表结构:

PartNumbnerID PK int(IDENTITY)
PartNumber varchar(20)
BinNumber char(5) FK 
BinPrimary bit 

样本数据:

PartNumberID  PartNumber    BinNumber    BinPrimary

1             123           22222          0
2             345           22222          0
3             456           33333          0
4             678           33333          0
5             789           44444          1
6             890           44444          0

查询结果为:

BinNumber
 22222
 33333
4

2 回答 2

2

它很简单:

select BinNumber
from MyTable
group by BinNumber
having max([Primary]) = 0

这是一个 SqlFiddle:http ://www.sqlfiddle.com/#!3/c1d25/2

于 2013-07-25T16:35:30.440 回答
1

当您需要更多列时,这可能是一个优势,但是如果您只需要 Binnumber,您应该使用 Wolf 的解决方案

SELECT PartNumberID,PartNumber,BinNumber,Primary FROM 
(
SELECT 
PartNumberID,PartNumber,BinNumber,Primary,
max(primary) over(partition by BinNumber) chk
FROM table
) a
WHERE chk = 0
于 2013-07-25T17:06:59.997 回答