0

次のSQL文を使用したい

SELECT TRANSCRIPTDETAIL.PEOPLE_ID, 
MIN(TRANSCRIPTDETAIL.TranscriptDetailId) AS min_transcr_detail_id, 
MIN(TRANSCRIPTDETAIL.START_DATE) AS min_class_start, 
MIN(TRANSCRIPTDETAIL.ACADEMIC_YEAR) AS min_aca_year, 

MIN(CASE TRANSCRIPTDETAIL.ACADEMIC_TERM 
    WHEN 'SPRING' THEN TRANSCRIPTDETAIL.ACADEMIC_YEAR + '1-SPRING' 
        + COALESCE (ACADEMIC.ACADEMIC_RATING, N'') 
    WHEN 'SUMI' THEN TRANSCRIPTDETAIL.ACADEMIC_YEAR + '2-SUMI' 
        + COALESCE (ACADEMIC.ACADEMIC_RATING, N'') 
    WHEN 'FALL' THEN TRANSCRIPTDETAIL.ACADEMIC_YEAR + '2-FALL' 
    + COALESCE (ACADEMIC.ACADEMIC_RATING, N'') 
    ELSE TRANSCRIPTDETAIL.ACADEMIC_YEAR + '*-' 
            + transcriptdetail.academic_term + '*' 
            + COALESCE (ACADEMIC.ACADEMIC_RATING, N'') 
    END) AS student_min_term_track, 

MIN(COALESCE (dbo.ACADEMIC.ACADEMIC_RATING, N'')) AS min_track 

FROM dbo.TRANSCRIPTDETAIL AS TRANSCRIPTDETAIL 
INNER JOIN dbo.ACADEMIC 
ON TRANSCRIPTDETAIL.PEOPLE_CODE_ID = dbo.ACADEMIC.PEOPLE_CODE_ID 
    AND TRANSCRIPTDETAIL.ACADEMIC_YEAR = dbo.ACADEMIC.ACADEMIC_YEAR 
    AND TRANSCRIPTDETAIL.ACADEMIC_TERM = dbo.ACADEMIC.ACADEMIC_TERM 
    AND TRANSCRIPTDETAIL.TRANSCRIPT_SEQ = dbo.ACADEMIC.TRANSCRIPT_SEQ 
    AND TRANSCRIPTDETAIL.ACADEMIC_SESSION = dbo.ACADEMIC.ACADEMIC_SESSION 

WHERE (TRANSCRIPTDETAIL.ACADEMIC_YEAR >= '2011') 

GROUP BY TRANSCRIPTDETAIL.PEOPLE_ID, dbo.ACADEMIC.PEOPLE_CODE_ID, 
dbo.ACADEMIC.PROGRAM, dbo.ACADEMIC.COLLEGE 

ORDER BY TRANSCRIPTDETAIL.PEOPLE_ID, min_class_start, dbo.ACADEMIC.PROGRAM DESC

Microsoft SQL Server Manager 2008 に入れて購入すると、個人、プログラム、および大学ごとに 1 行ではなく、1 年に 1 行が与えられ、学年がグループに追加され続けます。

私がやろうとしていることは合法であり、サーバーマネージャーはそれを特に気にしていませんか、それとも私はこれを行うことができませんか?

4

1 に答える 1

0

これを試して:

;WITH CTE AS 
(
SELECT t.PEOPLE_ID, 
a.PEOPLE_CODE_ID, 
a.PROGRAM, 
a.COLLEGE , 
t.TranscriptDetailId, 
t.START_DATE, 
t.ACADEMIC_YEAR, 

-- student term track
CASE t.ACADEMIC_TERM 
    WHEN 'SPRING' THEN t.ACADEMIC_YEAR + '1-SPRING' 
        + COALESCE (A.ACADEMIC_RATING, N'') 
    WHEN 'SUMI' THEN t.ACADEMIC_YEAR + '2-SUMI' 
        + COALESCE (A.ACADEMIC_RATING, N'') 
    WHEN 'FALL' THEN t.ACADEMIC_YEAR + '2-FALL' 
    + COALESCE (A.ACADEMIC_RATING, N'') 
    ELSE t.ACADEMIC_YEAR + '*-' 
            + t.academic_term + '*' 
            + COALESCE (A.ACADEMIC_RATING, N'') 
END AS student_term_track, 

-- track
COALESCE (a.ACADEMIC_RATING, N'') AS track 

FROM dbo.TRANSCRIPTDETAIL t 
INNER JOIN dbo.ACADEMIC a ON t.PEOPLE_CODE_ID = a.PEOPLE_CODE_ID 
    AND t.ACADEMIC_YEAR = a.ACADEMIC_YEAR 
    AND t.ACADEMIC_TERM = a.ACADEMIC_TERM 
    AND t.TRANSCRIPT_SEQ = a.TRANSCRIPT_SEQ 
    AND t.ACADEMIC_SESSION = a.ACADEMIC_SESSION 

WHERE (t.ACADEMIC_YEAR >= '2011') 
)

SELECT PEOPLE_ID, 
MIN(TranscriptDetailId) AS min_transcr_detail_id, 
MIN(START_DATE) AS min_class_start, 
MIN(ACADEMIC_YEAR) AS min_aca_year, 
MIN(student_term_track) AS student_min_term_track
MIN(track) ) AS min_track 
FROm CTE
GROUP BY PEOPLE_ID, PEOPLE_CODE_ID, PROGRAM, COLLEGE 
ORDER BY PEOPLE_ID, MIN(START_DATE), PROGRAM DESC
于 2012-08-03T20:07:19.497 に答える