2016-07-21 2 views
0

저장 프로 시저를 만들려고하는데 잘못된 것으로 보입니다. 필요한 경우 SQL 만 사용하므로 개발자를 용서하고 도와주십시오. 두 테이블 (user_students와 student_grades_summary) 사이에서 내부 조인을 수행하는 SQL 쿼리를 저장 프로 시저에 포함하려고합니다. 여기에 내가 쓴 저장 프로 시저입니다 :사례 명세서를 사용하여 저장 프로 시저 만들기

CREATE PROCEDURE GradeStudents(in scoreover100 float, out s_grade char(3)) 
BEGIN 
CASE 
     WHEN (student_grades_summary.aggregate >= 80 && student_grades_summary.aggregate <= 100 && student_grades_summary.level = 'JSS') THEN 
      SET student_grades_summary.grade = 'A1'; 
     WHEN(student_grades_summary.aggregate >= 70 AND student_grades_summary.aggregate <= 79 AND student_grades_summary.level = 'JSS') THEN 
      SET student_grades_summary.grade = 'B1'; 
     WHEN (student_grades_summary.aggregate >= 60 AND student_grades_summary.aggregate <= 69 AND student_grades_summary.level = 'JSS') THEN 
      SET student_grades_summary.grade = 'B2'; 
     WHEN(student_grades_summary.aggregate >= 55 AND student_grades_summary.aggregate <= 59 AND student_grades_summary.level = 'JSS') THEN 
      SET student_grades_summary.grade = 'P1'; 
     WHEN(student_grades_summary.aggregate >= 50 AND student_grades_summary.aggregate <= 54 AND student_grades_summary.level = 'JSS') THEN 
      SET student_grades_summary.grade = 'P2'; 
     WHEN(student_grades_summary.aggregate <= 49 AND student_grades_summary.level = 'JSS') 
      SET student_grades_summary.grade = 'F'; 
     WHEN(student_grades_summary.aggregate >= 85 AND student_grades_summary.aggregate <= 100 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'A1'; 
     WHEN(student_grades_summary.aggregate >= 80 AND student_grades_summary.aggregate <= 84 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'B2'; 
     WHEN(student_grades_summary.aggregate >= 75 AND student_grades_summary.aggregate <= 79 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'B3'; 
     WHEN(student_grades_summary.aggregate >= 70 AND student_grades_summary.aggregate <= 74 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'C4'; 
     WHEN(student_grades_summary.aggregate >= 65 AND student_grades_summary.aggregate <= 69 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'C5'; 
     WHEN(student_grades_summary.aggregate >= 60 AND student_grades_summary.aggregate <= 64 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'C6'; 
     WHEN(student_grades_summary.aggregate >= 55 AND student_grades_summary.aggregate <= 59 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'D7'; 
     WHEN(student_grades_summary.aggregate >= 50 AND student_grades_summary.aggregate <= 54 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'E8'; 
     WHEN(student_grades_summary.aggregate <= 49 AND student_grades_summary.level = 'SSS') THEN 
      SET student_grades_summary.grade = 'F9'; 
END CASE; 

는 그리고 이것은 내가에서 저장 프로 시저를 포함하는 것을 시도하고있는 SQL 쿼리입니다 기본적으로 내가 student_grades_summary에서 학년 컬럼에 값을 추가하려고하고있는 저장 프로 시저를 사용하여. .

select user_students.fname as FirstName, user_students.lname as LastName 
    , student_grades_summary.subject as CoreSubjects 
    , student_grades_summary.aggregate as Scoreover100 
    , student_grades_summary.subjectrank as Position 
    , student_grades_summary.term as Term 
    , student_grades_summary.level as Level 
    , student_grades_summary.class as Class 
    , student_grades_summary.section as Section 
    , student_grades_summary.session as Session 
FROM student_grades_summary 
JOIN user_students 
    ON student_grades_summary.level = user_students.level 
    AND student_grades_summary.class = user_students.class 
    AND student_grades_summary.section = user_students.section 
JOIN config_grades 
    ON student_grades_summary.level = config_grades.level 
WHERE user_students.level = 'JSS' 
    AND user_students.class = '2' 
    AND student_grades_summary.session = '2015/2016' 

그래서 phpMyAdmin을에, 내가 SQL에 오류가 말하는 붉은 구불 구불 한 선을 많이 얻을 : 어쨌든 여기에 SQL이다. 나는 코드를보고 오류가 무엇인지 찾아 낼 수는 없지만 시도했다.

+0

업데이트를 사용하지 않고 테이블에 값을 설정하려는 것 같습니다. proc은 case 문에서 임의의 테이블 이름을 이해하지 못합니다. _ 또한, 쿼리에 저장 프로 시저를 포함하거나 포함 할 수 없습니다. _ – Uueerdo

답변

0

나는이 시간과 시간을 다시 본다. 당신은 SQL에서 생각하지 않습니다. SQL에서는 집합으로 생각해야합니다. 서브 루틴에서 세트로 생각한다고 생각하지 마십시오. 이 경우 귀하의 세트는 우리가 테이블로 나타낼 수있는 등급에 대한 기준의 목록입니다 당신이 grade_lookup 테이블을 일단 당신이 그것에 가입하고 당신이 얻을

aggmin aggmax lvl grade 
80  100 'JSS' 'A1'  
70  79 'JSS' 'B1' 
60  69 'JSS' 'B2' 
55  59 'JSS' 'P1' 
50  54 'JSS' 'P2' 
0  49 'JSS' 'F' 
85  100 'SSS' 'A1' 
80  84 'SSS' 'B2' 
75  79 'SSS' 'B3' 
70  74 'SSS' 'C4' 
65  69 'SSS' 'C5' 
60  64 'SSS' 'C6' 
55  59 'SSS' 'D7' 
50  54 'SSS' 'E8' 
0  49 'SSS' 'F9' 

을 (내가 grade_lookup를 호출합니다) 성적 - 필요 없음 함수 호출 -이 같은 :

select user_students.fname as FirstName, user_students.lname as LastName 
    , s.subject as CoreSubjects 
    , s.aggregate as Scoreover100 
    , s.subjectrank as Position 
    , s.term as Term 
    , s.level as Level 
    , s.class as Class 
    , s.section as Section 
    , s.session as Session 

    -- the result of our lookup 
    , COALESCE(L.grade ,'lookup fail') as Grade 

FROM student_grades_summary S 
JOIN user_students 
    ON student_grades_summary.level = user_students.level 
    AND student_grades_summary.class = user_students.class 
    AND student_grades_summary.section = user_students.section 
JOIN config_grades 
    ON student_grades_summary.level = config_grades.level 

-- join to grade lookup 
LEFT JOIN GRADE_LOOKUP L ON s.aggregate >= L.aggmin 
        and s.aggregate <= L.aggmax 
        and s.level = L.lvl 

WHERE user_students.level = 'JSS' 
    AND user_students.class = '2' 
    AND student_grades_summary.session = '2015/2016' 

참고, 난 그냥 당신의 선택 문에이 붙어 - 당신의 선택 문이 올바른지 아닌지 나는 아무 생각도 없어 - 돈 내 예제 코드를 올바른지 검증하는 데 재사용을 고려하지 않습니다.

+0

이러한 자세한 설명을 주셔서 감사합니다. 나는 이것을보고 어떻게되는지를 알려 줄 것이다. –

+0

귀하의 답변은 귀하의 답변을 받아 들일 것입니다. 왜냐하면 모든 것을보고 귀하의 답변을 기반으로 적절한 수정을하는 것이 영감을 받았기 때문입니다. 덕분에 –

+0

@Eagletrophy - 듣기 좋다. 행운을 빈다. – Hogan

관련 문제