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