![](/img/trans.png)
[英]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.