Sql 在不使用子查询的情况下,将where子句添加到count而不是整个查询

Sql 在不使用子查询的情况下,将where子句添加到count而不是整个查询,sql,sql-server,Sql,Sql Server,下面的查询可以工作,但where子句的“o.opendate不为null,o.orderdate不为null,o.closedate为null,o.canceldate为null”部分只需应用于orderID计数(orderCount)。现在它应用于整个结果集,这不是我想要的。如何更改查询以执行此操作?此外,这些表非常大,因此我非常依赖索引,并且出于性能原因尽量不使用子查询。任何帮助都将不胜感激 select s.ZipCode, count(o.[OrderID]) orderCount, b

下面的查询可以工作,但where子句的“o.opendate不为null,o.orderdate不为null,o.closedate为null,o.canceldate为null”部分只需应用于orderID计数(orderCount)。现在它应用于整个结果集,这不是我想要的。如何更改查询以执行此操作?此外,这些表非常大,因此我非常依赖索引,并且出于性能原因尽量不使用子查询。任何帮助都将不胜感激

select s.ZipCode, count(o.[OrderID]) orderCount, b.Longitude, b.Latitude, b.ordering 
from ZipCodeServiceAvailability s  
left join pdx_orders_view o on s.ZipCode = left(o.[ZipCode], 5)  
left join ZipCodeBoundaries b on s.ZipCode = b.ZipCode  
Where s.state = 'TX' and Ordering % 10 = 0 and 
     o.opendate is not null and o.orderdate is not null and o.closedate is null and o.canceldate is null  
Group By s.ZipCode, IsServiced, b.Longitude, b.Latitude, b.Ordering  
Order by s.ZipCode, b.Ordering

您需要一个带有SUM的case语句:


然后,您应该删除
where
子句中的条件。

您需要一个带有SUM的case语句:


然后,您应该从
where
子句中删除这些条件。

您可以使用having子句执行任何操作

select s.ZipCode, count(o.[OrderID]) orderCount, b.Longitude, b.Latitude, b.ordering 
from ZipCodeServiceAvailability s  
left join pdx_orders_view o on s.ZipCode = left(o.[ZipCode], 5)  
left join ZipCodeBoundaries b on s.ZipCode = b.ZipCode  
Where s.state = 'TX' and Ordering % 10 = 0 and 
     o.opendate is not null 
Group By s.ZipCode, IsServiced, b.Longitude, b.Latitude, b.Ordering  
Having count(o.[OrderID]) is not null
Order by s.ZipCode, b.Ordering

你可以用having子句做你想做的事

select s.ZipCode, count(o.[OrderID]) orderCount, b.Longitude, b.Latitude, b.ordering 
from ZipCodeServiceAvailability s  
left join pdx_orders_view o on s.ZipCode = left(o.[ZipCode], 5)  
left join ZipCodeBoundaries b on s.ZipCode = b.ZipCode  
Where s.state = 'TX' and Ordering % 10 = 0 and 
     o.opendate is not null 
Group By s.ZipCode, IsServiced, b.Longitude, b.Latitude, b.Ordering  
Having count(o.[OrderID]) is not null
Order by s.ZipCode, b.Ordering

我想你也需要求和才能算出总数。回答得不错!那么1和0是什么?求和会代替计数吗?
Then 1 Else 0
根据
Case
标准为每行返回1或0,包装
Case
语句的
sum
会添加这些值,以获得应用于
Case
标准的行总数。我认为需要求和()倒不如去数一数。回答得不错!那么1和0是什么?总和会代替计数吗?
Then 1 Else 0
会根据
Case
标准为每行返回1或0,包装
Case
语句的
sum
会将这些值相加,以获得应用于
Case
标准的行总数。