0

我有一个查询输出一些我需要“过滤”的行。

我要过滤的数据是这样的:

rownum value
1       0
2       0
3       1
4       1

我需要前 2 行,但仅当它们在值列中有“0”时。

查询的结构是这样的:

select count(x)    
from     
(     
    select row_number() over (partition by X order by y) as rownum, bla, bla    
    from [bla bla]    

按 [bla bla] 分组)作为 temp
where

/* now this is where i want the magic to happen */

temp.rownum = 1 AND temp.value = 0

AND

temp.rownum = 2 AND temp.value = 0

因此,仅当第 1 行和第 2 行的值列中有“0”时,我才需要 x。

如果第 1 行或第 2 行的值列中有“1”,我不想要它们。

我基本上按照我在此处编写的方式编写了 where 子句,但它返回的数据集在第 1 行或第 2 行中具有“1”作为值。

如何解决这个问题?

4

1 回答 1

0

给定列的单行中的值永远不能同时是1两者2

所以,首先,要么使用OR(这是我相信你的意图):

WHERE (temp.rownum = 1 AND temp.value = 0)
OR (temp.rownum = 2 AND temp.value = 0)

或者完全简化查询:

WHERE temp.rownum <= 2 AND temp.value = 0 

从这里,您将只获得前两行,并且仅当value = 0. 如果您只想要行都返回时的行(即两行都有value = 0),请添加

HAVING COUNT(1) = 2

到查询。

于 2013-03-19T13:17:34.377 回答