Sql 获取每组中匹配的行

Sql 获取每组中匹配的行,sql,sql-server,Sql,Sql Server,我正在尝试进行sql查询。我从下面的两个表中得到了一些结果。下面的结果对我很好。现在我想要每个组中存在的值。例如,A和B出现在每个组(每个ID中)。所以我只想要A和B的结果。而且我想让我的查询动态化。有人能帮忙吗 | ID | Value | |----|-------| | 1 | A | | 1 | B | | 1 | C | | 1 | D | | 2 | A | | 2 | B | | 2 | C | | 3 |

我正在尝试进行sql查询。我从下面的两个表中得到了一些结果。下面的结果对我很好。现在我想要每个组中存在的值。例如,A和B出现在每个组(每个ID中)。所以我只想要A和B的结果。而且我想让我的查询动态化。有人能帮忙吗

| ID | Value |
|----|-------|
|  1 |     A |
|  1 |     B |
|  1 |     C |
|  1 |     D |
|  2 |     A |
|  2 |     B |
|  2 |     C |
|  3 |     A |
|  3 |     B |

在下面的查询中,我已将您当前的查询放入CTE以供进一步使用。我们可以尝试选择当前结果中显示每个
ID
的值。这意味着这些值与每个
ID
相关联

WITH cte AS (
    -- your current query
)

SELECT Value
FROM cte
GROUP BY Value
HAVING COUNT(DISTINCT ID) = (SELECT COUNT(DISTINCT ID) FROM cte);
select Value from MyTable group by Value
having SUM(ID) = (SELECT SUM(DISTINCT ID) from MyTable)

select Value from MyTable group by Value
having COUNT(ID) = (SELECT COUNT(DISTINCT ID) from MyTable)

使用这个

WITH CTE
AS
(
    SELECT
      Value,
  Cnt = COUNT(DISTINCT ID)
  FROM T1
  GROUP BY Value
)
SELECT
Value
FROM CTE
WHERE Cnt = (SELECT COUNT(DISTINCT ID) FROM T1)

解决方案很简单——至少可以用两种方法来实现。按字母分组(
Value
),使用
SUM
COUNT
(ID中的不同值)聚合ID。这样,选择那些具有
SUM(ID)
COUNT(ID)
值的字母