SQL 查询以获取具有相同状态的结果集

SQL query to fetch the result set with same status

table1如下,

ID FK1_ID FK2_ID
1 1 1
2 1 2
3 1 3

FK2的table如下,

ID Type Status
1 Type1 True
2 Type2 True
3 Type1 False

FK2_ID列是table2.

的ID列

预期的结果是,对于任何 FK1_ID(我有一个 ID 列表),需要在 Type1 的第二个 table 和状态 True 中检查其所有 FK2 条目。

例如: 在这里,我想 return YES,如果特定 FK1_ID 的所有 Type1 条目都是 True。其他编号

因此,对于 FK1_ID 和 1,FK2 table 有 3 条记录。其中Type1有2条记录。我应该 return YES,如果两个 Type1 记录都是 True,否则 NO。

我想使用 SQL 完成此操作。 感谢任何帮助?

我并不完全遵循你的逻辑(这两个表是如何连接的)但听起来你想比较总计数和条件计数所以可能是这样的

with t as (select type, count(status) as cnt,
 sum(case when status ='True' then 1 else 0 end) as truecnt
 from FK2
group by type)
select type, case when truecnt > 0 and cnt = truecnt then 'Yes' else 'No' end as MyResult
from t

看来您只需要将条件计数 Status 与完整计数进行比较,最终结果为 CASE

SELECT
  t1.FK1_ID,
  Result = CASE WHEN COUNT(*) = COUNT(CASE WHEN FK2.Status = 'True' THEN 1 END)
    THEN 'Yes'
    ELSE 'No' END
FROM table1 t1
JOIN FK2 ON FK2.ID = t1.FK2_ID
  AND FK2.Type = 'Type1'
GROUP BY
  t1.FK1_ID;

一个略短但不太容易理解的版本

CASE WHEN COUNT(*) = COUNT(NULLIF(FK2.Status, 'False'))

或者

CASE WHEN COUNT(NULLIF(FK2.Status, 'True')) = 0