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] でグループ化) as 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 

ここから、最初の 2 行だけを取得しますvalue = 0両方の行が返される場合 (つまり、両方の行に がある場合)にのみ行が必要な場合はvalue = 0、追加します。

HAVING COUNT(1) = 2

クエリに。

于 2013-03-19T13:17:34.377 に答える