Q&A

  • SQL문 질문입니다...
첫번째는 "YQL02"라는 테이블에 "Last_Number"라는 필드값의 데이타가 1,2,3 등 정수가 들어오는데
그중의 MAX값이 들어있는 레코더의 데이타만 가져올려구 합니다...
두번째는 "YQL02" 테이블의 "LAST_DT01,LAST_DT01..." 5개의 필드값을 조회해서
평균을 구할려고하는데 데이터값이 "999"인것을 제외한 값의 평균을 구하려고 합니다...
예를 들어서 5개의 필드에서 2개가 "999"이면 999를 제외한 3개의 필드값을 SUM해서 평균값을
SUM한 필드값으로 나누어야 되는거지요...

=================================================================
         with Qry do
         begin
              close;
              sql.clear;
              sql.add(' SELECT LAST_DT01,LAST_DT02,LAST_DT03,LAST_DT04,LAST_DT05,Max(LAST_Num)  FROM YQL02 ');
              sql.add(' WHERE MANDT='''+Client+''' ');
              sql.add('   AND AUFNR='''+g_Aufnr+''' ');
              sql.add('   AND INSP_CODE= ''6AAB'' ');
              sql.add('   AND LAST_RSLT in(''S'',''G'') ');
              open;

              Last_Data1 := Fields[0].AsFloat;
              Last_Data2 := Fields[1].AsFloat;
              Last_Data3 := Fields[2].AsFloat;
              Last_Data4 := Fields[3].AsFloat;
              Last_Data5 := Fields[4].AsFloat;

              Last_Aver := Last_Data1 + Last_Data2 + Last_Data3 + Last_Data4 + Last_Data5;
              EdtPlatthk.Text := floatToStr(Last_Aver/?);
         End;
         Application.ProcessMessages;
=================================================================
질문 >>
1. SQL문 조회시 필드값이 MAX인것을 조회...
2. 각 필드값이 "999"가 아닌 값들의 평균

부탁드립니다...
5  COMMENTS
  • Profile
    sky 2003.04.22 23:24
    1번) Last_Number Max인 레코드 조회

    SELECT LAST_DT01,LAST_DT02,LAST_DT03,LAST_DT04,LAST_DT05
    FROM YQL02
    WHERE Last_Number = (SELECT MAX(Last_Number) FROM YQL02)


    2번은 무슨 말인지 잘 모르겠네여.. 죄송.. ^^;;
    즐푸~
    ======================================================================
  • Profile
    김재현 2003.04.23 02:19
  • Profile
    [++曰+] 2003.04.22 22:50
    SQL은 적당한게 안 떠오르구요..

    그냥 프로그램에서 구할 수 있겠네요..

    참고하세요.. 그럼 즐코!!~



    with Qry do begin
      close;
      sql.clear;
      sql.add(' SELECT LAST_DT01,LAST_DT02,LAST_DT03,LAST_DT04,LAST_DT05,LAST_Num FROM YQL02 '); // 수정
      sql.add(' WHERE MANDT='''+Client+''' ');
      sql.add('   AND AUFNR='''+g_Aufnr+''' ');
      sql.add('   AND INSP_CODE= ''6AAB'' ');
      sql.add('   AND LAST_RSLT in(''S'',''G'') ');
      SQL.Add('Order By Last_Num');                 // 추가
      open;
      
      // 아래부분 추가
      if RecordCount > 0 then begin
        Last;
        MaxValue := Fields[5].AsFloat;  // 최고값

        Count := 0;
        Total := 0.0;
      
        for Idx := 0 to 4 do begin
          if Fields[Idx].AsFloat <> 999 then begin
            Inc(Count);
            Total := Total + Fields[Idx].AsFloat;
          end;  
        end;

        if Count <> then begin
          Aver := Total / Count;  // 평균값
        end;
      end;
    End;


    with Qry do begin


  • Profile
    김재현 2003.04.23 01:08
    감사합니다... 그런데
    Last;
    절이 쓰이는 의미가 뭔가요???

  • Profile
    윤수아 2003.04.23 02:52
    First ;  <- 찾은 결과의 맨처음 레코드를 가리킵니다.
    Next;  <- 현재 가리키고 있는 레코드의 다음 레코드를 가리킵니다.
    Last; <- 찾은 결과의 맨마지막 레코드를 가리킵니다.

    여기서 가리킨다는 의미는 포인트적인 의미입니다.