簡體   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