繁体   English   中英

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

[英]How to exclude a specific row from an SQL Count

我需要从 SQL 服务器的COUNT中排除某行。 这就是我所拥有的:

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;

如果我删除最后一个AND GuestStayDetails.GuestId;= @GuestId; 它给了我预期的COUNT但是我必须排除其中一个GuestID 有什么建议么?

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

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; 

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

WHERE @ArrivalDate <= DepartureDate AND
      @DepartureDate >= ArrivalDate AND
      Student = 1 AND
      Cancelled = 0 AND
      GuestStayDetails.GuestId <> @GuestId

这完全消除了对任何括号的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM