检查SQL中是否满足任何4个10条件

时间:2012-09-04 15:16:56

标签: sql sql-server

我为提出一个非常模糊的问题而道歉,但现在就是这样。 我必须在SQL Server中编写SQL查询,如下所示。 我有一张表说tblA有10列col1,col2,..... col10。 每列都不为null,并且肯定包含一些值,并且所有类型都为int。 查询应该是选择所有这样的记录,其中至少4列与给定的过滤条件匹配,其中过滤条件具有所有10列的值。

我用google搜索得到一个线索。它需要在SQL服务器和单个查询中完成。 请建议。

提前致谢。

3 个答案:

答案 0 :(得分:3)

SELECT *
FROM
    yourtable
WHERE
    case col1 when @value1 then 1 else 0 end +
    case col2 when @value2 then 1 else 0 end +    
    ...
    case col10 when @value10 then 1 else 0 end 

    >=4

答案 1 :(得分:3)

您可以使用CASE表达式来确定是否有四列或更多列匹配:

 SELECT *
 FROM YourTable
 WHERE CASE WHEN Col1 = Filter1 THEN 1 ELSE 0 END + 
     CASE WHEN Col2 = Filter2 THEN 1 ELSE 0 END + 
     ....
     CASE WHEN Col10 = Filter10 THEN 1 ELSE 0 END >= 4

答案 2 :(得分:0)

您可以这样做:

select *
from (select t.*,
             (case when col1 <whatever> then 1 else 0 end) as col01_matches,
             (case when col2 <whatever> then 1 else 0 end) as col02_matches,
             . . .
      from t
     ) t
where (col1_matches + col2_matches + col3_matches . . .) >= 4

这为每个匹配创建一个单独的指示符变量。您还可以在单​​个变量中在子查询中执行求和。我希望将每个匹配分开,以防逻辑变得更复杂或者我想查看匹配的内容。