Sql 正在联接同一个表以获取某些ID的重复行

Sql 正在联接同一个表以获取某些ID的重复行,sql,sql-server-2008,Sql,Sql Server 2008,` 我试过这个 I have a table test ID Status 1 A 1 C 2 A 3 A 4 A 4 C 4 A 4 C 5 A Desire Output ID Status 1 A 1 C 4 A 4 C

` 我试过这个

I have a table test 

ID       Status     

1       A     
1       C     
2       A   
3       A   
4       A  
4       C  
4       A  
4       C  
5       A


Desire Output

ID      Status  
1       A   
1       C     
4       A   
4       C   
4       A   
4       C

对于ID=1,它可以正常工作,其中它给我2行,但是对于ID=4,它给我8行,我不知道我做错了什么

您的查询的唯一问题是子查询当前将返回多个具有C状态的ID。这里的一个选项是在子查询中使用
groupbyid
,以限制每个ID只出现一次

 select * from test 
join
    (
        select id from test t
        where status='c'
    ) b
on b.id=test.id

您得到8行,因为您的ID 4有更多的“Cs”,而只有1行

如果你只是跑

SELECT t1.ID, t1.Status
FROM test t1
INNER JOIN
(
    SELECT ID
    FROM test
    WHERE Status = 'C'
    GROUP BY ID
) t2
    ON t1.ID = t2.ID
你会得到

    select id from test t
    where status='c'
结果

因此,在你的内心深处,选择尝试

    1, 4, 4

如果要获得所需的输出,请尝试使用计数:

    select DISTINCT id from test t
    where status='c'

如果在“内部选择”中使用“计数”,则无需筛选任何特定状态:

 SELECT 
    t1.ID, t1.Status
 FROM 
    test t1
 GROUP BY
    t1.ID, t1.Status
 Having
    COUNT(t1.ID) > 1

嗨,蒂姆,我得到6行的一些ID,其中在DB中只有4@RedDevil当我在本地运行此查询时,我会得到您想要的输出。你的数据肯定还有其他问题。要求是“C”的计数为1或更大,而不是任何ID的计数为2或更大(同样,不是我的下一票)。我不确定OP是否需要这个,而且你的查询是我答案的剪切粘贴副本(不是我的下一票)。剪切粘贴是。但是从这个问题来看;)
SELECT t1.ID, t1.Status
FROM [test] t1
INNER JOIN
(
    SELECT ID
    FROM [test]
    GROUP BY ID
    HAVING COUNT(*) > 1
) t2
    ON t1.ID = t2.ID