Q&A

  • query 순차적조회 방법과 값을 누적시키는 구현을....간단한 예제라도....
질문의 요지는 에디트 박스에서 날짜를 입력받아 (20040101)~(20040531) Main테이블의 MM_Date 날짜를 비교후 같으면 메인테이블의 MM_code값과 수진테이블의 Ms_MainCode값을비교하여 같으면  price필드값을 누적시키는 구현입니다. (인터베이스 사용)

즉 메인테이블의 날짜는 같은날이 여러개가 존재하고 수진테이블에는 날짜 필드가 없지만 MM_code필드와 Ms_MainCode값과 같습니다.

델파이 초보자 입니다.
===================================================
Main(테이블)                               Sujin(테이블)
MM_Code(필드) MM_ Date(필드)   MS_MainCode(필드)   price(필드)  
00000001            20040415             00000001                     462000
00000002            20040415             00000002                     550000
00000003            20040415             00000003                     458000
00000001            20040416             00000001                     50000
00000002            20040416             00000002                     45000
=================================================================
procedure TFormSuBol.BtnViewClick(Sender: TObject);
var
MainByun, SuJinByun, Date1, Date2 :String;
SuJinTotal:Integer;

begin
  Date1:= (Edt_Date.Text) + (Edt_SuJinDate1.Text); //년도,월,일
  Date2:= (Edt_Date.Text) + (Edt_SuJinDate2.Text);//년도,월,일
   with DataModule1.Qry_Me_SuJin do begin
    close;
    Sql.Clear;
    Sql.Add('Select A.MM_Code, A.MM_Date, B.MS_MainCode, B.price                ' );
     sql.Add(' From Main A,  Sujin B       ');
     sql.Add(' Where A.MM_code = B.MS_MainCode ' =  +quotedStr(Date1 )); <=======요기서 에러
     open;                                                                                  
       if Eof then Begin
         ShowMessage('등록된 자료가 없습니다');
         Edt_SuJinDate1.SetFocus;
         Edt_SuJinDate1.SelStart:= 0;
         Edt_SuJinDate1.SelLength:= Length(Edt_SuJinDate1.Text);
         exit;
       end;

     MainByun:= FieldByName('MM_Code').AsString;
     SuJinByun:= FieldByName('Ms_MainCode').AsString;
여기에서 질문요 첫번째 날짜를 기준으로 값을 조회하여 price값을 누적시켰는데
같은날의 다음레코드의 값을 어떻게 누적시키는지.......

For


    
   end;
end;


3  COMMENTS
  • Profile
    [勳]후니 2004.04.16 22:00
    SELECT SUM(B.MS_MainCode)
       FROM Main A,  Sujin B
    WHERE A.MM_DATE BETWEEN 날자1 AND 날자2
         AND A.MM_CODE = B.MM_MAINCODE

    SQL문만 작성해도 값을 구 할수 있습니다.

    그리고 테이블 sujin에서 MS_MAINCODE 필드 값이 중복된 값이 있는데

    이러면 PRICE 필드값 하나만 가져 올수 없습니다.

    MS_MAINCODE 값 외 또 비교할 수 있는 필드가 있어야 할 꺼 같은데...

    아니면 이 테이블 자체가 원하는게 그런것인지.. 흠...

    main테이블과 sujin 테이블은 1대 다의 연관성을 가지고 있는네요

    예제로 주신 테이블은...


  • Profile
    임순철 2004.04.16 22:43
    먼저 답변 정말로 감사드리고요.
    Ms_MainCode 값은 Main테이블의 MM_code 값과 일치합니다.
    그리고 중복되는것은 Main테이블의 MM_Date날짜가 다릅니다.

    즉 날짜를 기준으로 처음에 같은지 검사하고 MM_code 값과 sujin테이블의 Ms_Maincode값을 비교합니다. 값이 같으면 price 값을 변수에 저장합니다.
    그리고 다음에 또다시 날짜를 검색하여 같은날짜가 있으면 또비교하여 값을 누적시키는 구현입니다.

    초보라 설명이 길어지네여

  • Profile
    [勳]후니 2004.04.17 00:05
    이런 식의 SQL문이면 될꺼 같네요..

    SELECT SUM(B.MS_MainCode)
       FROM Main A,  Sujin B
    WHERE A.MM_DATE = 날자
         AND A.MM_CODE = B.MM_MAINCODE

    이문장이면 한 날짜의 누적 값을 다 가지고 올 수 있습니다.

    날자 기간만큼만 루프 돌려주시면 되고요...