1

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

我用谷歌搜索了一个线索。它需要在 SQL Server 和单个查询中完成。请建议。

提前致谢。

4

3 回答 3

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
于 2012-09-04T15:19:22.417 回答
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
于 2012-09-04T15:20:11.867 回答
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

这会为每个匹配创建一个单独的指示变量。您也可以在子查询中的单个变量中求和。我宁愿单独进行每个匹配,以防逻辑变得更复杂或者我想查看匹配的内容。

于 2012-09-04T15:21:42.223 回答