我正在尝试计算一列中共享相同FK ID的重复项的数量。每个Shared_FK_id只能有一种类型。
table:
Shared_FK_ID : bigint
type: varchar(50)
样本数据:
831 Ford
831 Fiat
831 Honda
831 Honda
831 Dodge
831 Volvo
831 Volvo
831 Opel
答案 0 :(得分:2)
应该适用于大多数sql DBMS
select Shared_FK_ID, count(*) nmbr_of_dbls
from (
select Shared_FK_ID, type , count(*)
group by Shared_FK_ID, type
having count(*) > 1
) t
group by Shared_FK_ID
答案 1 :(得分:1)
要详细介绍Serg's answer,并使其特定于SQL Server,可以根据所需的确切输出执行以下任一操作。
1)包含重复项的类型数:
select Shared_FK_ID, count(*) nmbr_of_dbls
from (
select Shared_FK_ID, [type] , count(*) nmbr
from data
group by Shared_FK_ID, [type]
having count(*) > 1
) t
group by Shared_FK_ID
2)整个FK ID中重复行的总数:
select Shared_FK_ID, sum(nmbr) nmbr_of_dbls
from (
select Shared_FK_ID, [type] , count(*) nmbr
from data
group by Shared_FK_ID, [type]
having count(*) > 1
) t
group by Shared_FK_ID
实时演示:https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c8e1ed9607430fde16157367d59afc90