[英]How to exclude 0 from count()? in 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.