<!--CodeS-->
With Query1 do begin
if HavingTbl('Temptbl') <> -1 then
begin
Close;
SQL.Clear;
SQL.Add('drop table Temptbl');
ExecSQL;
end;
// HavingTbl end
Close;
SQL.Clear;
SQL.Add('Create Table Temptbl(CustName Text(20),');
SQL.Add('CustCode Text(05),');
SQL.Add('CustAmt Double,');
SQL.Add('CustCostAmt Double,');
SQL.Add('CustBeforeDebt Double,');
SQL.Add('CustReceipt Double,');
SQL.Add('CustTodayDebt Double,');
SQL.Add('CustBuyTotal Double,');
SQL.Add('CustPercent Double)');
ExecSQL;
Close;
SQL.Clear;
SQL.Add('Select Sa_Cust,Sa_Amt,Sa_CostAmt ');
SQL.Add('from Sa010sm ');
SQL.Add('Where Sa_Year = :edtDate and Sa_Jpgbn like :JpCheck ');
SQL.Add('Order by Sa_Cust ');
ParamByName('edtDate').AsString := edtYear.Text + edtMonth.Text + edtDay.Text;
ParamByName('jpCheck').AsString := '0';
Open;
While i < RecordCount-1 do
begin
if DbGrid1.Fields[0].Value <> TempString1 then
begin
// 거래처 명을 받아오기 위한 쿼리
Query2.Close;
Query2.SQL.Clear;
Query2.SQL.Add('Select Name ');
Query2.SQL.Add('from As030sm ');
Query2.SQL.Add('Where Cust = :Cust ');
Query2.SQL.Add('Order by Cust ');
Query2.ParamByName('Cust').AsString := DbGrid1.Fields[0].Value;
Query2.Open; // 조회시에는 Open, 삭제,업데이트시에는 Exec
// 채무 테이블을 가져오는 쿼리
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('Select Sb_J_JuruAmt, Sb_JuruAmt ');
Query3.SQL.Add('from Sb040sm ');
Query3.SQL.Add('Where Sb_Cust = :Cust ');
Query3.SQL.Add('Order by Sb_Cust ');
Query3.ParamByName('Cust').AsString := DbGrid1.Fields[0].Value;
Query3.Open; // 조회시에는 Open, 삭제,업데이트시에는 Exec
inc(j);
TempString1 := DbGrid1.Fields[0].Value ;
Table1.Open;
Table1.Insert;
Table1.FieldByName('CustName').AsString := DbGrid3.Fields[0].Value ;
Table1.FieldByName('CustCode').AsString := DbGrid1.Fields[0].Value ;
==> Table1.FieldByName('CustAmt').AsFloat := StrToFloat(DbGrid1.Fields[1].Value);
Table1.FieldByName('CustCostAmt').AsFloat := StrToFloat(DbGrid1.Fields[2].Value);
if Query3.RecordCount > 0 then begin
Table1.FieldByName('CustTodayDebt').AsFloat := StrToFloat(DbGrid4.Fields[0].Value);
Table1.FieldByName('CustReceipt').AsFloat := StrToFloat(DbGrid4.Fields[1].Value);
Table1.FieldByName('CustBeforeDebt').AsFloat := StrToFloat(DbGrid4.Fields[1].Value)
+ StrToFloat(DbGrid4.Fields[0].Value);
end;
Next;
DbGrid3.SetFocus;
DbGrid3.SelectedIndex := j;
if Query3.RecordCount > 0 then begin
DbGrid4.SetFocus;
DbGrid4.SelectedIndex := j;
end;
end // dbGrid의 거래처가 다를때
else
begin
==> Table1.FieldByName('CustAmt').AsFloat := Table1.FieldByName('CustAmt').AsFloat +
StrToFloat(DbGrid1.Fields[1].Value);
Table1.FieldByName('CustCostAmt').AsFloat := Table1.FieldByName('CustCostAmt').AsFloat +
StrToFloat(DbGrid1.Fields[2].Value);
Next;
end;
inc(i);
end; // While end
end; // With end
<!--CodeE-->
좀 막짜서 보시기 어렵겠지만...
DB:MS Access 툴 : Delphi 7
임시테이블을 만들고 그곳에 값들을 집어넣어서 퀵리포트로 출력을 하려고 합니다.
일단 앞의 사항들은 제대로 다 돌아가는데요
Table의 값중 ==> 표시부분이 거래처가 다를때 값을 받는 부분이고
아래쪽의 ==> 표시부분이 거래처가 같을때 값을 받는 부분입니다.
그래서 DBGrid한줄에 거래처마다 한개씩만 값이 합쳐져서 보여집니다.
여기까지는 성공인데
실제 디비에는 한거래처에 5~4개씩 레코드가 있는걸
<!--CodeS-->
Ex) 거래처 공급가 거래처 공급가
20001 1,253,252 20001 1,878,684
20001 625,432 => DBGrid에서 20002 1,976,704
20002 724,452
20002 1,252,252
<!--CodeE-->
위와 같이 나타납니다.
여기서 거래처 전체의 공급가를 구해서 Table1의 CustBuyTotal필드에 넣을려구
하는데 생각만큼 잘 안되네요...
합산을 구한다음 각 거래처마다 전체 매출의 몇퍼센트인지 퀵리포트에 출력할려구 하니
방법이 잘 ....ㅠㅠ
고수님들 조언좀 부탁드립니다....
Ex) 거래처 공급가 거래처 공급가
20001 1,253,252 20001 1,878,684
20001 625,432 => DBGrid에서 20002 1,976,704
20002 724,452
20002 1,252,252
1.일케 하시구서
2.전체 공급가는 1,878,684 + 1,976,704 = 3,855,388
3.그리고 거래처 20001 , 20002 의 공급가에 대한 퍼센트를 구하고 싶다는 것이군요...
우선 1번은 거래처로 Group By 하셔서 공급가를 Sum 하시면 될 거구요..
2번은 Sum(공급가) 하시면 총액 나올 거구...
3번은 1번과 2번을 적당히 섞으시면..
우선 2번을 구하셔서 변수에 넣으시고...
Select SUM(공급가) AS Total_I From Sa010sm
myTotal := FieldbyName('Total_I').asinteger;
그 다음 1번 쿼리
Select 거래처, SUM(공급가), (SUM(공급가) / myTotal * 100) AS AAA From Sa010sm
Group by 거래처
일케하시면... 거래처별로 공급가와 비율이 나오게 되지 않을까요?
그리고 // 거래처 명을 받아오기 위한 쿼리 랑 // 채무 테이블을 가져오는 쿼리 이 부분은
1번 쿼리 쓸때.. join으로 해서 할 수 있지 않을까요...
음 자세히 뭘 하시는지 몰라서...
A 테이블
거래처 코드 , 거래처 이름
B 테이블
거래처 코드, 공급가
원하는 테이블
거래처 이름, 거래처별 총 공급가, 비율
이라고 하면
Select A테이블.거래처 이름, SUM(B 테이블.공급가), (SUM(B 테이블.공급가) / myTotal * 100) AS AAA
From A 테이블, B 테이블
Where A 테이블.거래처 코드 = B 테이블.거래처 코드
OrderBy A테이블.거래처 이름
이렇게 될 거 에요.. 웅.. Order By랑 join이랑 별 문제 없나..음..기억이 가물치..가물치...