查找重复的行和相关记录

时间:2015-02-06 05:35:37

标签: sql sql-server tsql duplicates

我有一个迁移到新架构的数据库。旧数据库没有参照完整性,所以我需要摆脱大量重复。

我有RegisteredVehicles的表格:

id | plate | state 
#  | 1425  | il
#  | 3322  | il

ParkingRequests

的表格
id | date   | registeredVehicleId (FK)
#  | 2/2/12 | #  

相关关系是一对多的 - 一个注册的车辆可以满足许多要求。

以下查询通过PlateState获取每个重复记录,并输出每个RegisteredVehicle's ID。

select Id, Plate, [State] from RegisteredVehicles where Plate in (
select plate from RegisteredVehicles group by Plate having count(*) > 1
)

这给了我这样的东西

Id                                      Plate   State
036d59f1-d928-40f2-b373-049122202bff    0000000 IL
615e2fab-8b43-4e42-b6f0-268038bba949    0000000   

我正在尝试获取上述代码块中返回的每个车辆行的停车请求数。像这样的东西

Id | Plate | State | # Requests
1  | 222   | IL    | 2
2  | 333   | IL    | 4  

但我遇到的问题是使查询比现在更复杂。这本身花了我很长时间才开始工作。

1 个答案:

答案 0 :(得分:0)

请尝试此查询:

SELECT
    A.ID,
    A.PLATE,
    A.STATE AS [STATE],
    COUNT(A.ID) AS [NO OF REQUESTS]
FROM REGISTEREDVEHICLES A
LEFT JOIN PARKINGREQUESTS B
    ON B.REGISTEREDVEHICLEID = A.ID
WHERE
    A.PLATE IN(
                    SELECT 
                        PLATE 
                    FROM REGISTEREDVEHICLES 
                    GROUP BY PLATE
                    HAVING COUNT(*) > 1
    )
    GROUP BY     
    A.ID,
    A.PLATE,
    A.STATE