얼마전에야 select 구문에 union절에 대해 알게 되었습니다...
그래서 응용해 보고자 아래와 같이 구현을 하였는데 자꾸 에러가 나오더군요...
어느 부분이 잘못됬는지 별 쑈(?)를 다해봤는데 도저히 못찾겠어여...
고수님들이 봐주시고 어디가 잘못됬는지 가르쳐주십시요...
참고로 아래사항은 차량별 품목재고현황을 나타내는 사항으로 차량과 품목을
사용자가 선택한 것에 대해서만 표시하는 프로그램입니다...
각각 선택된 것은 gub1이라는 필드에 "@"표시가 되어있습니다...
이것을 사용한 이유는 각 차량내 품목별 재고사항과 더불어 차량에 대한 소계를
한 화면에 보여주고 싶어서 사용했습니다...
즉 아래와 같이 되게끔 말이죠...
차량 코드 품명 규격 단위 매입가 수량 재고금액
2433 1001 간장 50g ea 1,600 10 16,000
2433 1002 간장 100g ea 2,000 10 20,000
2433 1003 간장 150g ea 3,000 10 30,000
소계 66,000
1426 1001 간장 50g ea 1,600 20 32,000
:
:
그래서 union다음절에 사용한 "9999", "소계"등은 각각의 필드에 소계를 표시하고
정렬을 용이하게 하기 위해서 사용하게 되었습니다...
처음에는 master/detail구조를 이용해 했는데 재고현황이라 한눈에 보이는 것이
훨씬 보기가 좋더라구요...
with Query1 do
begin
Close;
SQL.Clear;
SQL.Add('Select 차량, 코드, 품명, 규격, 거래단위, 매입가, 재고량, 재고금액 ');
SQL.Add(' from (Select a.코드, b.코드, b.품명, b.규격, b.거래단위, b.매입가, sum(c.차량수량), sum(c.차량수량*b.매입가) from 차량 a, 품목 b, 전표 c');
SQL.Add(' Where a.코드 = c.차량코드');
SQL.Add(' and b.코드 = c.품목코드');
SQL.Add(' and a.gub1 = ''@''');
SQL.Add(' and b.gub1 = ''@''');
SQL.Add(' and c.일자 <= '''+DateToStr(DateTimePicker1.Date)+'''');
SQL.Add(' Group By a.코드, b.코드, b.품명, b.규격, b.거래단위, b.매입가');
SQL.Add(' union all ');
SQL.Add(' Select a.코드, "9999", " 소 계 ", "", "", "", "", sum(c.차량수량*b.매입가) from 차량 a, 품목 b, 전표 c');
SQL.Add(' Where a.코드 = c.차량코드');
SQL.Add(' and b.코드 = c.품목코드');
SQL.Add(' and a.gub1 = ''@''');
SQL.Add(' and b.gub1 = ''@''');
SQL.Add(' and c.일자 <= '''+DateToStr(DateTimePicker1.Date)+'''');
SQL.Add(' Group By a.코드)');
SQL.Add('Order By a.코드, b.코드' );
Open;
end;
고수님들...
이 초보를 불쌍히 여기사 꼭 좀 가르쳐주세요....^^
사용화일을 동봉하고 싶은데 여기 기능이 없어서 제가 몇번이나 확인했음을
알려드립니다... 즉 화일명이나 필드명은 틀리지 않습니다...
그리고 paradox 화일이구요 delphi 6.0을 사용합니다...
파라독스에서 인라이뷰가 되는지 잘모르겠네요...