我有一个数据库,该数据库按关联的模型组列出了部件号。大约一半的零件是模型组所独有的。我想知道是否有办法只选择模型组唯一的零件号。
我发现使用以下代码可以很好地解决该问题:
'''
Select Distinct
a.*
,b.count
from
(SELECT
[PART_NO]
,[Family]
FROM [dbo].[Mapping_Perkins_Parts_Series_Models] ) a
left join
(SELECT distinct
[PART_NO]
,count(part_no) as count
FROM [dbo].[Mapping_Perkins_Parts_Series_Models]
group by part_no ) b
on b.PART_NO = a.PART_NO
where count = 1
'''
我想知道是否可以在单个select语句而不是嵌套的select语句中执行此操作?我一直遇到的问题是,我必须将组中的所有字段都包括在内,一旦这样做,该零件的任何实例出现两次但具有不同族的情况都被视为唯一记录。
'''
数据集:(零件号,家庭)
(1, a)
(1, b)
(2, a)
(3, b)
(4, a)
(4, b)
(5, b)
(6, a)
预期结果:(零件号,家庭)(2,a)(3,b)(5,b)(6,a)
尝试此:
select * from
(
select PART_NO,count(distinct Family) PartFamCount
from [dbo].[Mapping_Perkins_Parts_Series_Models]
group by PART_NO
)x
where PartFamCount=1
如果RDBMS支持窗口功能,则可以在子查询中进行窗口计数,并在外部查询中进行过滤,例如:
SELECT *
FROM (
SELECT t.*, COUNT(*) OVER(PARTITION BY Part_No) cnt
FROM mytable t
) x
WHERE cnt = 1