2017-04-13 1 views
0

여기 내 쿼리입니다. 왜 각 행이 결과를 3 배로 늘리는 지 알 수 없습니다. 나는 뚜렷한 선택을 시도했다. AssessmentProficiencyLevelRank가 모든 레코드에 대해 3 번 반복됩니다. 이러한 추가 행은 어떻게 제거합니까?SQL 반복 행

Select distinct 
sai.AcademicYear, 
sai.AcademicYearNum, 
sai.StateCode, 
sai.StudentBKID, 
sai.StudentDWID, 
sai.LastName, 
sai.FirstName, 
sai.ReportName, 
sai.calendarperiodname, 
case when aps.StateAssessmentProficiencySubjectName = 'Not Applicable' and sub.Subject = 'Algebra I' then 'Math' 
    when aps.StateAssessmentProficiencySubjectName = 'Not Applicable' and sub.Subject = 'Algebra 1' then 'Math' 
    when aps.StateAssessmentProficiencySubjectName = 'Not Applicable' and sub.Subject = 'Algebra II' then 'Math' 
    when aps.StateAssessmentProficiencySubjectName = 'Reading' then 'ELA' 
else aps.[StateAssessmentProficiencySubjectName] end as StateAssessmentProficiencySubjectName, 
sai.AssessmentName, 
sai.assessmentdate, 
sai.scaledscore, 
sai.GradeAbbreviation, 
dar.proficiency, 
dar.AssessmentProficiencyLevelRank 
into #main 

From StudentAssessmentMart.dbo.vwStateAssessmentInformation sai 

inner join StudentAssessmentMart.dbo.FctAssessmentStateSubject fct 
    on sai.StudentDWID = fct.StudentDWID 

inner join StudentAssessmentMart.dbo.DimStateAssessmentProficiencySubject aps 
    on fct.StateAssessmentProficiencySubjectDMID = aps.StateAssessmentProficiencySubjectDMID 

inner join StudentAssessmentMart.dbo.DimAssessmentSubject sub 
    on sub.AssessmentSubjectDWID = fct.AssessmentSubjectDWID 

inner join StudentAssessmentMart.dbo.DimAssessmentResults dar 
    on dar.AssessmentScoreCategoryDWID = fct.AssessmentScoreCategoryDWID 

where sai.Proficiency != 'Unknown Proficiency' 
and dar.Proficiency != 'Unknown Proficiency' 
and sai.StudentBKID = 174957 
and sai.Subject not in ('Science','Social Studies','SocStud','Listening','writing','sci','citizenship') 
and sai.gradeabbreviation not in ('k','1','2','unknown') 
order by StudentBKID 

select distinct min(AcademicYearNum) 'min', max(AcademicYearNum)'max', StudentBKID 
into #new 
from #main 
group by StudentBKID 

select distinct *, 'min year' as minmaxyear from #main main 
inner join #new newtable 
    on newtable.StudentBKID = main.StudentBKID 
    and newtable.min=main.AcademicYearNum 

where StateAssessmentProficiencySubjectName <> 'Not Applicable' 

union 

select distinct *, 'max year' as minmaxyear from #main main 
inner join #new newtable 
    on newtable.StudentBKID = main.StudentBKID 
    and newtable.max=main.AcademicYearNum 
and GradeAbbreviation = '8' 

where StateAssessmentProficiencySubjectName <> 'Not Applicable' 
order by main.StudentBKID 
drop table #main, #new 
+0

이 문제를 해결하기위한 좋은 접근 방법을 제공하려면 좀 더 많은 정보가 필요합니다. 가장 중요한 것은 dar.AssessmentProficiencyLevelRank의 데이터 유형은 무엇입니까? –

답변

0

더 이상 중복을 얻을 수 없을 때까지 한 번에 하나씩 조인을 주석 처리하십시오. 그런 다음 중복을 일으키지 않도록 조인을 다시 작성하는 데 집중하십시오.

+0

그것을 알아 냈어! 고맙습니다! – vanstrka