2016-09-21 57 views
0

我需要识别具有多个相同IncidentCode的所有StudentID,但只有当IncidentID也大于1.我该怎么做?如何根据计算两个标准来确定结果?

数据集:

enter image description here

所需的结果:

enter image description here

样本数据集的代码:

CREATE TABLE #Duplicates(
IncidentID varchar(10), 
StudentID varchar(10), 
IncidentCode varchar(10), 
Levels varchar(10) 
) 
INSERT into #Duplicates (IncidentID, StudentID, IncidentCode, Levels) 
VALUES 
('1', '4444444','06','1'), 
('1', '4444444','06','2'), 
('23', '5555555','06','1'), 
('22', '3333333','06','2'), 
('64', '3333333','06','2'), 
('64', '3333333','06','3') 

SELECT * 
FROM #Duplicates 

谢谢!

回答

0
select D2.* 
from Dataset D2 
inner join ( 

select StudentID, count(incidentCode) 
from Dataset 
where IncidentID >1 
group by StudentID 
having count(incidentCode) >1 
) A1 
on A1.StudentID = D2.StudentID 
+0

感谢您的回复@JohnHC。但是,这给了我一个错误:“没有列名'被指定为'A1'的列2”。 – JM1

2
SELECT Distinct * 
FROM #Duplicates 
Where IncidentID in (Select IncidentID from #Duplicates Group By IncidentID having count(*)>1) 

返回

IncidentID StudentID IncidentCode Levels 
1   4444444  06    1 
1   4444444  06    2 
64   3333333  06    2 
64   3333333  06    3 
+0

谢谢@John Capelletti。这确实返回了我在原始问题中询问的结果。我改变了这个问题,以更好地反映我所追求的内容,我需要看到具有相同事件ID的同一个事件代码中的1个以上的学生。这有意义吗?我是否需要提出一个新问题,或者更改这个问题?再次感谢! – JM1

1

您可以使用也加入:它会帮助你在性能,如果你是在处理庞大的数据

SELECT * 
FROM #Duplicates a 
INNER JOIN (SELECT incidentID FROM #Duplicates b 
GROUP BY incidentID HAVING COUNT(incidentCode)>1) b ON a.IncidentID = b.IncidentID 
1

您可以使用这样的查询

;WITH cte 
AS (SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY studentid ORDER BY incidentcode) AS rn 
FROM #Duplicates 
WHERE IncidentID > 1) 
SELECT DISTINCT 
    StudentId 
FROM cte