2013-12-08 2 views
1

을 계산하는 경우 :삽입 다음과 같이 진술은 기본적으로 내가 학생 테스트 소프트웨어 및 내 테이블 구조의 일부를 만드는거야 등급

RESULTS_TBL: QPaper_ID, Marks, Class, Subject, Grade, Student_ID [THIS TABLE STORES THE CALCULATED RESULTS BASED ON HIS PERFORMANCE] 

ANSWERS_TBL: QPaper_ID, Marks, Class, Subject, Student_ID [THIS TABLE STORES ONLY THE CORRECT ANSWERS GIVEN BY THE STUDENTS AND THE MARKS FOR EACH QUESTION ] 

내가 주로 학년을 결과를 계산하고를 삽입 할 값을 ANSWERS_TBL에서 RESULTS_TBL로 변경하십시오. 나는이 쿼리를 실행하면

DECLARE @A_G INT, @B_G INT, @C_G INT, @D_G INT 
SET @A_G = 40 
SET @B_G = 30 
SET @C_G = 10 
INSERT INTO RESULTS (QPaper_ID, Marks,Student_ID, Class, Grade) 
select QPaper_ID, sum(Marks), Student_ID, Class, 
case 
when sum(Marks) > @A_G then 'A' 
when sum(Marks) between @B_G and @A_G then 'B' 
when sum(Marks) between @C_G and @B_G then 'C' 
else 'D' 
END 
from ANSWERS where QP_ID = 1000 and Login_ID = 'a' 
GROUP BY QPaper_ID ,Marks, Student_ID, Class 

이 답변에서 모든 행은 내가 원하지 않는 결과에 삽입 : 다음은 내 코드의 일부이다. 나는 각 문제에 대한 점수의 합을 얻은 성적과 함께 계산하는 하나의 기록만을 원한다. BTW가 올바른 코드입니다.

감사

+1

아마도 마크별로 그룹화하지 않으시겠습니까? – HABO

+0

@HABO - 나도 몰라 ?? 나는 어떻게해야합니까? – JasonBourne

+0

@HABO - 알았어요. 감사합니다. – JasonBourne

답변

0

당신이 모든 레코드를 반환하게 GROUP BY 절에 Marks를 넣어 (뿐만 아니라 가산 할) 때문에이 발생합니다. 에서 제거하십시오 GROUP BY

DECLARE @A_G INT, @B_G INT, @C_G INT, @D_G INT 
SET @A_G = 40 
SET @B_G = 30 
SET @C_G = 10 
INSERT INTO RESULTS (QPaper_ID, Marks,Student_ID, Class, Grade) 
select QPaper_ID, sum(Marks), Student_ID, Class, 
case 
when sum(Marks) > @A_G then 'A' 
when sum(Marks) between @B_G and @A_G then 'B' 
when sum(Marks) between @C_G and @B_G then 'C' 
else 'D' 
END 
from ANSWERS where QP_ID = 1000 and Login_ID = 'a' 
GROUP BY QPaper_ID, Student_ID, Class 
+0

감사합니다. 하지만 문제는 SQL에서이 쿼리를 실행할 때 (즉, 레코드가 1 개만 삽입 됨) 작동하지만 프런트 엔드 (VB2012)에서 동일하게 시도 할 때 동일한 레코드가 2 개 삽입된다는 것입니다. – JasonBourne

+0

이상 하네. 위의 쿼리에서 선택한 부분 만 코드에서 실행하고 반환하는 레코드 수를 확인할 수 있습니까? – Szymon

관련 문제