1

这是我坚持的简单数据库表示:

IDNumber     TimeSpent         Completed
 1              0                  No
 1              0                  No
 1              2                  No
 2              0                  No
 3              0                  No

我目前正在查询数据库......

"SELECT Distinct (IDNumber) AS Info FROM TestTable
                                    ORDER BY WorkOrderNumber";

它给了我结果

1
2
3

这是预期的。

现在,我想将其调整为任何具有 TimeSpent != 0 或 Completed != No 的 IDNumber 实例意味着 IDNumber 根本没有被抓取。因此,例如在给定的数据库中,由于 TimeSpent = 2,我根本不希望在查询中返回 IDNumber 1。

我的第一直觉是跳到这样的地方......

"SELECT Distinct (IDNumber) AS Info FROM TestTable
                                    WHERE TimeSpent='0' AND Completed='No'
                                    ORDER BY WorkOrderNumber";

但显然那是行不通的。它会正确地忽略其中一个 IDNumber 1,但由于另外两个仍然满足 WHERE 子句,它仍然会返回 1。

这里有任何指示吗?

4

2 回答 2

2
SELECT DISTINCT IDNumber
FROM TestTable
WHERE IDNumber NOT IN 
    (SELECT IDNUmber FROM TestTable WHERE TimeSPent <> 0 OR Completed <> 'No')
于 2013-03-24T23:21:10.753 回答
1

您可以使用一个having子句通过聚合来执行此操作:

select IDNumber
from TestTable
group by IDNumber
having sum(case when TimeSpent = 0 then 1 else 0 end) = 0 and 
       sum(case when Completed = 'No' then 1 else 0 end) = 0

having子句计算满足每个条件的行数。这= 0只是说没有匹配项。

我更喜欢聚合方法,因为它在您可以对组设置的条件方面更加灵活。

于 2013-03-24T23:27:05.347 回答