如何从SQL计数中排除特定行

如何从SQL计数中排除特定行,sql,sql-server,Sql,Sql Server,我需要从SQL Server中的计数中排除某一行。这就是我所拥有的: SELECT COUNT(GuestId)TotalBooked FROM GuestStayDetails WHERE (@ArrivalDate = ArrivalDate) OR (@DepartureDate = DepartureDate) OR (@ArrivalDate < ArrivalDate AND @DepartureDate = DepartureDate) OR (@Arr

我需要从SQL Server中的
计数中排除某一行。这就是我所拥有的:

SELECT COUNT(GuestId)TotalBooked
FROM GuestStayDetails
WHERE (@ArrivalDate = ArrivalDate)
   OR (@DepartureDate = DepartureDate) 
   OR (@ArrivalDate < ArrivalDate AND @DepartureDate = DepartureDate) 
   OR (@ArrivalDate = ArrivalDate AND @DepartureDate < DepartureDate)
   OR (@ArrivalDate < ArrivalDate AND @DepartureDate > DepartureDate)
   OR (@ArrivalDate < DepartureDate AND @DepartureDate > DepartureDate)
   OR (@ArrivalDate BETWEEN ArrivalDate AND DATEADD(Day, -1, DepartureDate))
   OR (@DepartureDate BETWEEN DATEADD(Day, -1, ArrivalDate) AND DepartureDate)
  AND Student = 1
  AND Cancelled = 0
  AND GuestStayDetails.GuestId != @GuestId;
选择计数(GuestId)TotalBooked
来自GuestStaydails
其中(@ArrivalDate=ArrivalDate)
或(@DepartureDate=DepartureDate)
或(@ArrivalDate出发日期)
或(@ArrivalDateDepartureDate)
或(@ArrivalDate介于ArrivalDate和DATEADD之间(天-1,出发日期))
或(@DepartureDate介于DATEADD(Day,-1,ArrivalDate)和DepartureDate之间)
学生=1
和取消=0
和gueststaydails.GuestId!=@GuestId;

如果我删除最后一个
和gueststaydails.GuestId!=@GuestId它给了我期望的
计数
,但是我必须排除
GuestID
s中的一个。有什么建议吗?

看起来您需要在-或-条件周围添加一些括号。你能测试一下并告诉我们它是否有效吗?注意-或-子句周围的开始括号和结束括号

SELECT COUNT(GuestId)TotalBooked
FROM GuestStayDetails
WHERE (
        (@ArrivalDate = ArrivalDate)
     OR (@DepartureDate = DepartureDate) 
     OR (@ArrivalDate < ArrivalDate AND @DepartureDate = DepartureDate) 
     OR (@ArrivalDate = ArrivalDate AND @DepartureDate < DepartureDate)
     OR (@ArrivalDate < ArrivalDate AND @DepartureDate > DepartureDate)
     OR (@ArrivalDate < DepartureDate AND @DepartureDate > DepartureDate)
     OR (@ArrivalDate BETWEEN ArrivalDate AND DATEADD(Day, -1, DepartureDate))
     OR (@DepartureDate BETWEEN DATEADD(Day, -1, ArrivalDate)AND DepartureDate) 
  )
  AND Student = 1
  AND Cancelled = 0
  AND GuestStayDetails.GuestId != @GuestId; 
选择计数(GuestId)TotalBooked
来自GuestStaydails
在哪里(
(@ArrivalDate=ArrivalDate)
或(@DepartureDate=DepartureDate)
或(@ArrivalDate出发日期)
或(@ArrivalDateDepartureDate)
或(@ArrivalDate介于ArrivalDate和DATEADD之间(天-1,出发日期))
或(@DepartureDate介于DATEADD(Day,-1,ArrivalDate)和DepartureDate之间)
)
学生=1
和取消=0
和gueststaydails.GuestId!=@GuestId;

看起来您正在寻找重叠的时间间隔,以及括号问题。如果是这样,您可以大大简化查询:

WHERE @ArrivalDate <= DepartureDate AND
      @DepartureDate >= ArrivalDate AND
      Student = 1 AND
      Cancelled = 0 AND
      GuestStayDetails.GuestId <> @GuestId
其中@ArrivalDate=ArrivalDate和
学生=1和
取消=0和
gueststaydails.GuestId@GuestId

这就不需要任何括号。

您缺少一组括号,逻辑才能正常工作-您需要在所有
条件周围使用括号,以确保它们按预期工作。您试图实现的逻辑是什么?我们需要样本数据和预期结果来理解您的逻辑。我要计算特定日期内的内部预订数量查询不必如此。我需要知道是否有人在特定的日期被预订……包括到达前、到达后、离开前、离开后以及到达和离开期间departure@Paula1999 . . . 这就是这个逻辑的作用。是的,谢谢。我试过这个,它对我有效!!谢谢你为我简化了这件事。我确实把它改成了
@ArrivalDateArrivalDate和
,这样它就不会标记任何在出发日到达或在抵达日离开的人。非常感谢。是的,这对我有用!!非常感谢你的帮助!