我有一个查询输出了一些我需要“过滤”的行。
我要过滤的数据是这样的:
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”作为值。
如何解决这个问题?
答案 0 :(得分: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
查询。