2014-01-27 60 views
0

我正在使用預訂系統。一個錯誤允許一些單位成爲重複預訂。SQL - 查找重複的單元簽入日期

使用Microsoft SQL Server 2012點快速

IE,單元x被預訂了兩個客戶端使用相同的簽入日期。

該錯誤已得到解決,但我想檢查是否有任何單位確實重複預訂。

我正在努力使SQL查詢工作返回這些「重複」單位。我可以在代碼中用幾個例程處理這個問題,但我希望得到一個SQL查詢來顯示這些單元。

我試圖聯接(在同一個表),剛剛返回的所有單位......然後,我嘗試了一些子查詢,但我搞亂的東西了......

SELECT * 
FROM bookingTable as q1 
WHERE (q1.unit = (SELECT unit FROM bookingTable AS q2 
        WHERE q2.unit = q1.unit) 
     AND q1.checkIn = (SELECT checkIn FROM bookingTable AS q3) 
    ) 
ORDER BY 
    q1.checkIn,q1.unit 

錯誤:

Msg 512, Level 16, State 1, Line 2
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

回答

3
SELECT unit,checkIn,COUNT(*) 
FROM bookingTable 
GROUP BY unit,checkIn 
HAVING COUNT(*) > 1 

會告訴你出現在多行unitcheckIn值哪個組合。

如果你願意,你就可以使用它來顯示各行:

SELECT bt.* 
FROM bookingTable bt 
INNER JOIN (
    SELECT unit,checkIn,COUNT(*) as cnt 
    FROM bookingTable 
    GROUP BY unit,checkIn 
    HAVING COUNT(*) > 1 
) t 
ON bt.unit = t.unit and 
    bt.checkIn = t.checkIn