SQL如何识别在where

时间:2017-02-06 22:29:50

标签: sql sql-server

我有一个约100万行的表,在这个表上我必须从2个条件运行一些过滤。第二个条件子句必须运行第一个过滤器的结果。最后,我必须从原始表中识别每一行,如果它被第一个条件或第二个条件过滤掉或者没有(满足两个条件并且在最终结果集中)。

就像table.Column1>数据第一条件 table.Column2在x,y之间作为第二个条件

最终结果是第一个条件&&第二个条件(两个条件匹配的行)

在多个where条件下标记要过滤掉的行的最佳方法是什么。

由于

1 个答案:

答案 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