2017-05-25 2 views
0

Ich versuche zu identifizieren, wenn ein Datensatz AtAboveBelowGradeLevel = 1 für beide Jahre hat. Mit anderen Worten, wie würde ich die folgende Fallaussage machen?Mehrere und Anweisungen

SELECT AcademicYear 
    ,SchoolName 
    ,Subject 
    ,LastName 
    ,firstname 
    ,StudentBKID 
    ,AtAboveBelowGradeLevelCount 
    ,CASE 
     WHEN AtAboveBelowGradeLevelCount = 1 
      AND AcademicYear = '2015-2016' 
      AND AcademicYear = '2016-2017' 
      AND AtAboveBelowGradeLevelCount = 1 
      THEN 'TRUE' 
     ELSE 'NO' 
     END 
FROM StudentAssessmentMart.dbo.vwMAPAssessmentInformation 
WHERE AcademicYear IN (
     '2015-2016' 
     ,'2016-2017' 
     ) 
    AND SchoolName LIKE 'alliance%' 
    AND subject IN ('math') 
    AND StudentBKID IN (
     '473106' 
     ,'420219' 
     ) 
    AND CalendarPeriodName = 'spring' 
GROUP BY AcademicYear 
    ,SchoolName 
    ,Subject 
    ,LastName 
    ,firstname 
    ,StudentBKID 
    ,AtAboveBelowGradeLevelCount 
ORDER BY StudentBKID 
    ,AcademicYear 

Antwort

0

Dies ist eine Vereinfachungs Version

SELECT 
    StudentBKID 
    ,CASE 
     WHEN COUNT(CASE WHEN AtAboveBelowGradeLevelCount = 1 THEN 1 END) = 2 
     THEN 'TRUE' 
     ELSE 'NO' 
    END 
FROM StudentAssessmentMart.dbo.vwMAPAssessmentInformation 
WHERE AcademicYear IN ('2015-2016','2016-2017') 
    AND SchoolName LIKE 'alliance%' 
    AND subject IN ('math') 
    AND StudentBKID IN ('473106','420219') 
    AND CalendarPeriodName = 'spring'  
GROUP BY StudentBKID 

Das Jahr bereits auf dem WHERE Filter, so dass Sie nur eine bedingte Zählung müssen so sehen, wie viele von denen sind AboveBelowGrade