Select 不同的行,其中一列中的所有值都相同 SQL 服务器

Select distinct rows where all values in a column are the same SQL Server

我想找到不同的 FKID,其中 IsProcessed 对于相同的 FKID 为 True。 例如

CID    FKID    DataField    IsProcessed

1      1       Test         1
2      1       Test         1
3      2       Test         0
4      2       Test         1
5      3       Test         0
6      3       Test         0
7      4       Test         1
8      5       Test         0
9      6       Test         1
10     6       Test         1
11     6       Test         1

我想要返回以下 FKIDs 1,4,6 因为这些是 FKID,其中 isprocessed 对于所有实例都是正确的。

如有任何帮助,我们将不胜感激!谢谢!

您可以使用 SUM() OVERCOUNT() OVER

;WITH CTE AS(
    SELECT
        *,
        IsProcessedCount = SUM(CASE WHEN IsProcessed = 1 THEN 1 ELSE 0 END) OVER(PARTITION BY FKID),
        cc = COUNT(*) OVER(PARTITION BY FKID)
    FROM TEST
)
SELECT
    DISTINCT FKID
FROM CTE
WHERE IsProcessedCount = cc

使用 GROUP BYHAVING:

SELECT FKID
FROM Test
GROUP BY FKID
HAVING COUNT(FKID) = COUNT(CASE WHEN IsProcessed = 1 THEN 1 ELSE NULL END)

另一种方式:

SELECT FKID
FROM Test
GROUP BY FKID
HAVING COUNT(FKID) = SUM(CAST(IsProcessed AS INT))

只需将 TEST 替换为您的 table。

SELECT FKID
FROM TableName
GROUP BY FKID
HAVING (MIN(IsProcessed) = 1)

或者

SELECT FKID
FROM TableName
GROUP BY FKID
HAVING (MIN(CAST(IsProcessed AS INT)) = 1)

如果 IsProcessed 不是数字类型:

另一种方式,使用相关的 not exists 谓词:

select fkid from TableName t
where IsProcessed = 1
  and not exists 
    (select 1 from TableName where IsProcessed = 0 and FKID = t.FKID)
group by fkid

或相同的使用not in:

select fkid from TableName t
where IsProcessed = 1
  and fkid not in 
    (select fkid from TableName where IsProcessed = 0 and FKID = t.FKID)
group by fkid