2017-02-06 8 views
1

私は〜100万行のテーブルを持っていますが、このテーブルでは2つの条件からいくつかのフィルタリングを実行する必要があります。 2番目の条件節は1番目のフィルタの結果で実行する必要があります。最終的には、第1の条件または第2の条件によってフィルタリングされるか、またはいずれも満たされない場合(または両方の条件を満たし、最終結果セットにある場合)、元のテーブルから各行を識別する必要があります。SQL where句でフィルタリングされたレコードを特定する方法

Xとそのtable.Column1>データのような第1条件 table.Column2、第2条件として、Y

最終的な結果は何& &第2の状態(マッチの両方の条件を持つ行)

第1条件であります複数行の条件で除外された行をマークする最善の方法。

おかげ

答えて

1
SELECT *, 
     CASE WHEN <filter1_here> THEN 1 ELSE 0 END AS FILTER1, 
     CASE WHEN <filter2_here> THEN 1 ELSE 0 END AS FILTER2 
FROM TABLE 

このクエリの結果は、彼らがフィルタ1またはフィルタ2である場合を伝える二つの新しい列と同じテーブルです。

どのように多く、

SELECT SUM(filter1) as filter1_count, SUM(filter2) as filter2_count 
FROM (
    SELECT *, 
     CASE WHEN <filter1_here> THEN 1 ELSE 0 END AS FILTER1, 
     CASE WHEN <filter2_here> THEN 1 ELSE 0 END AS FILTER2 
    FROM TABLE 
)X 

フィルタリングされたデータ

SELECT * 
FROM (
    SELECT *, 
     CASE WHEN <filter1_here> THEN 1 ELSE 0 END AS FILTER1, 
     CASE WHEN <filter2_here> THEN 1 ELSE 0 END AS FILTER2 
    FROM TABLE 
)X 
WHERE FILTER1 = 1 OR FILTER 2 = 1 
関連する問題