我很抱歉问了一个非常模糊的问题,但问题就在这里。我必须在SQL Server中编写一个SQL查询,如下所示。我有一张表,比如tblA,它有来自col1、col2、…的10列,。。。。。col10。每一列都不为null,并且肯定包含一些值和int类型的所有值。查询应该选择所有这样的记录,其中至少有4列与给定的筛选条件匹配,其中筛选条件具有所有10列的值。
我在谷歌上搜索力得到了线索。它需要在SQL server和单个查询中完成。请提出建议。
提前谢谢。
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
您可以使用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
您可以这样做:
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
这将为每个匹配创建一个单独的指示符变量。您也可以在子查询中,在单个变量中求和。我更希望每个匹配都单独进行,以防逻辑变得更复杂或我想看看匹配的内容。