0

我有以下表结构

table 1     
ID SOURCE_ID    NAME
1   1            A
2   1            B
3   2            B
4   2            C
5   2            A

我需要选择在所有 SOURCE_ID 中通用的名称,因此我希望名称 A 和 B 因为它们同时出现在 SOURCE_ID 1,2 中。

以下查询为我提供了预期的输出:

SELECT  DISTINCT NAME  
FROM TABLE1 A, TABLE1 B
WHERE A.NAME = B.NAME AND A.SOURCE_ID != B.SOURCE_ID 

现在,当表中的数据更改为包含新记录 ID 6


table 1     

ID  SOURCE_ID   NAME
1   1             A
2   1             B
3   2             B
4   2             C
5   2             A
6   3             A

在所有三个 SOURCE_ID(1,2,3) 中通用的名称是 A。

输入新记录时,我的查询无法返回正确的输出。

请提供一个在插入新记录时可以正常工作的查询。

4

1 回答 1

1

看看类似的东西

DECLARE @Table TABLE(
        SOURCE_ID INT,
        NAME VARCHAR(20)
)

INSERT INTO @Table SELECT 1,'A'
INSERT INTO @Table SELECT 1,'B'
INSERT INTO @Table SELECT 2,'B'
INSERT INTO @Table SELECT 2,'C'
INSERT INTO @Table SELECT 2,'A'

--INSERT INTO @Table SELECT 3,'A'

;WITH DistinctCount AS (        
        SELECT  NAME,
                COUNT(DISTINCT SOURCE_ID) Cnt
        FROM    @Table
        GROUP BY    NAME
)
SELECT  *
FROM    DistinctCount
WHERE   Cnt = (SELECT COUNT(DISTINCT SOURCE_ID) FROM @Table)

注释掉第 6 个插入,应该返回 A 和 B,包括它,应该返回 A

于 2012-07-11T06:06:49.887 回答