2011-09-21 160 views
2

我想要做的是将一个COUNT添加到多个表上的查询中,但我只想在事件满足特定条件时进行计数。有没有办法将条件添加到COUNT()中?

我想伯爵只计算有像这样一个ReceivedDate行:

COUNT(ReceivedDate = "0000-00-00 00:00:00", plpq.PurchaseOrderID) AS OrdersForPart 

有什么办法来实现这一目标,而不必诉诸于一个子查询?

回答

2

假设你可能要执行的其他行的一些聚集,因此不能只排除它们完全是WHERE子句。

COUNT(CASE 
     WHEN ReceivedDate = "0000-00-00 00:00:00" 
     THEN plpq.PurchaseOrderID 
     END) AS OrdersForPart 

如果这不是WHERE条款当然是最好的选择的情况下。

+0

与标准选择相比,这没有提供准确的计数。 –

+0

@Ben - 你是否记得'COUNT(plpq.PurchaseOrderID)'只计算其中'plpq.PurchaseOrderID不为NULL'的值?如果你不想要这种行为,请使用常数。 –

1
SELECT COUNT(plpq.PurchaseOrderID) 
    AS OrdersForPart 
    FROM table 
    WHERE ReceivedDate = "0000-00-00 00:00:00" 
2

只是在哪里使用。

SELECT COUNT(plpq.PurchaseOrderID) AS OrdersForPart FROM ... WHERE ReceivedDate = '000-00-00 00:00:00' 

应该只是罚款;)

相关问题