Q&A

  • select결과가 여러개일때...
테이블 check,score의 필드가 다음과 같이 구성되어 있다고 할때

ID, CHECKER, ENG, MATH



채점자(CHECKER)5명이 과목별로 참가자(ID)의 점수를 채점해서 check테이블에 입력했을때

(check테이블의 PK는 CHECKER와 ID)



check테이블에서 과목별로 채점자 점수의 평균값을 구하여 score테이블에 입력하고 싶은데

그러니까 ID 1번이 CHECKER1~5에게 받은 점수의 평균값 말이지요.



with Qcheck do begin

close;

sql.clear;

sql.add('select AVG(eng) as eng from check group by ID');

Open;

eng := FieldByName('eng').AsInteger;

end;



이런식으로 하면

eng := FieldByName('eng').AsInteger 의 결과값이 id별로 여러개가 돌아오는데

그걸 하나씩 아이디순으로 테이블 score에 저장하려면

어떻게 써줘야 하나요?





아시는 분 도움 부탁드립니다.

1  COMMENTS
  • Profile
    오승섭 1999.10.21 20:09
    우선 DB가 어떤것이지, 그리고 Table Score의 Field구성이 어떤지 모르겠지만



    예를들어 DB는 ORACLE에 Score의 구성Field가 ID, ENG_AVG, MATH_AVG라고 가정하면



    INSERT INTO SCORE(ID, ENG_AVG, MATH_AVG)

    SELECT ID, DECODE(SUM(NVL(ENG,0)),0,0,SUM(NVL(ENG,0))/COUNT(CHECKER)),

    DECODE(SUM(NVL(MATH,0)),0,0,SUM(NVL(MATH,0))/COUNT(CHECKER))

    FROM CHECK

    GROUP BY ID;

    혹은

    INSERT INTO SCORE(ID, ENG_AVG, MATH_AVG)

    SELECT ID, AVG(ENG), AVG(MATH)

    FROM CHECK

    GROUP BY ID;

    라고 하면 어떨까요.



    혹시나 해서 참고설명을 드립니다.

    DECODE는 Query문장에서 사용하는 IF문장이라 할 수 있습니다

    예) DECODE(A,'1','Yes','2','No','All') AS KKK

    ==> IF A = '1' THEN KKK := 'Yes'

    ELSE IF A = '2' THEN KKK := 'No'

    ELSE KKK := 'All'



    질문하신 내용에 대답이