Select 只有满足 where 子句 60% 的行 - SQL 服务器

Select only rows that satisfy 60% of the where clause - SQL Server

我在 SQL 中面临挑战。我有以下查询:

SELECT *
FROM Books
WHERE
    Categories IN ('Fiction', 'art') OR
    Language IN ('en', 'de') OR
    Country = 'DE'

我要看结果,如果至少等于其中两个因素,就会被接受,不会被选中。

例如如果一本书有 Category = FictionLanguage = FRCountry = DE

=> 通过

一本书 Category = HistoryLanguage = FRCountry = DE

=> 失败

如何在 SQL 中实现?

我试图计算每一行的权重。每个因素都会将 0.3 添加到完整权重,并且只会选择具有 > 0.6

的那个

我也试过分组。但是我真的找不到正确的语法。

有什么想法吗?谢谢!

P.S。我不能把所有的可能性都放在我的 where 子句中,因为我有超过 3 个因素。

select * from
(
    SELECT *,
           case when Categories in ('Fiction', 'art') then 1 else 0 end as cat_condition,
           case when Language in ('en', 'de') then 1 else 0 end as lang_condition,
           case when Country = 'DE' then 1 else 0 end as country_condition
    FROM Books
    WHERE
        Categories in ('Fiction', 'art') OR
        Language in ('en', 'de') OR
        Country = 'DE'
) tmp
where cat_condition + lang_condition + country_condition >= 2

这是 where 子句中的 case 表达式的一种情况:

SELECT *
FROM Books
WHERE ( (CASE WHEN Categories in ('Fiction', 'art') THEN 1 ELSE 0 END) +
        (CASE WHEN Language IN ('en', 'de') THEN 1 ELSE 0 END) +
        (CASE WHEN Country = 'DE' THEN 1 ELSE 0 END)
      ) >= 2;

或者,或者:

WHERE ( (CASE WHEN Categories in ('Fiction', 'art') THEN 1 ELSE 0 END) +
        (CASE WHEN Language IN ('en', 'de') THEN 1 ELSE 0 END) +
        (CASE WHEN Country = 'DE' THEN 1 ELSE 0 END)
      ) / 3.0 >= 0.6