2017-04-13 67 views
0

這是我的查詢,我無法弄清楚爲什麼每行的結果是三倍。我試過選擇不同的。 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