我有一个约100万行的表,在这个表上我必须从2个条件运行一些过滤。第二个条件子句必须运行第一个过滤器的结果。最后,我必须从原始表中识别每一行,如果它被第一个条件或第二个条件过滤掉或者没有(满足两个条件并且在最终结果集中)。
就像table.Column1>数据第一条件 table.Column2在x,y之间作为第二个条件
最终结果是第一个条件&&第二个条件(两个条件匹配的行)
在多个where条件下标记要过滤掉的行的最佳方法是什么。
由于
答案 0 :(得分: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
此查询的结果是同一个表,其中有两个新列,告诉您它们是否在filter1或filter2中。
多少,
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