在另一列的条件下检查row_number行的结果

时间:2013-03-19 13:10:05

标签: sql-server

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

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

rownum value
1       0
2       0
3       1
4       1

我需要前两行,但只有当它们在值列中有“0”时才会显示。

查询的结构如下:

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

分组[bla bla]     )作为临时
    其中

/* 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。

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

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

给定列的单行中的值永远不能同时为12

首先,要么使用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

查询。