比较表中行之间的数据

时间:2012-07-11 05:45:57

标签: tsql

我有以下表结构

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)IS A中常见的名称。

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

请在插入新记录时向我提供一个可正常运行的查询。

1 个答案:

答案 0 :(得分: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