SQL - 查找具有重复CheckIn日期的单元

时间:2014-01-27 10:42:51

标签: sql .net sql-server-2012-express

我正在预订系统。一个错误允许一些单位是重复预订。

使用Microsoft SQL Server 2012 Express

IE,单位x是为具有相同checkIn日期的两个客户预订的。

错误已修复,但我想检查是否有任何单位确实重复预订。

我正在努力使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

ERROR:

  

Msg 512,Level 16,State 1,Line 2
  子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

1 个答案:

答案 0 :(得分: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