답변해 주셔서 감사합니다.
if 문을 어찌 해볼라고 오늘 3일째 헤매고 있습니다.
아, FireBird 2.0 을 지금 사용 할 수 있나요?
그리고 거기서는 아래 프로시져를 일반쿼리로 할 수 있을 까요?
다음이 제가 처리 하고자 하는 프로시져 입니다.
각 거래처별 건건의 Data를 보여주고 거래처별 소계를 내고
마지막에 합계를 내기 위한 프로시져 입니다.
/* 유저가 콤보박스나 Edit박스를 통해 조건을 주고 버튼을 누르면
IBQuery를 통해 아래 프로시져를 호출해서 그리드에 보여준다
이때 각 조건별로 값을 가져오기 위해 if문을 사용해야 한다.
*/
CREATE PROCEDURE SEL_TR140T_210
(
SELT VARCHAR(1), -- 청구월(1)인지 정산월(2)인지의 값
TPCD VARCHAR(1), -- 체구분(T), 특정구분(G,C,H,S,D,O..)
WJCD VARCHAR(5), -- NULL이면 전체 거래처, 값이 있으면(A0001) 해당거래처만
STDT VARCHAR(10),-- 시작월값
ENDT VARCHAR(10) -- 종료월값
)
RETURNS
( CODE VARCHAR(5),
KUBN VARCHAR(1),
"외주처명" VARCHAR(40),
"JOB NO" VARCHAR(15),
"건 명" VARCHAR(50),
"구 분" VARCHAR(20),
"외주금액" NUMERIC(9,0),
"선지급액" NUMERIC(9,0),
"광고주명" VARCHAR(40),
JBCD VARCHAR(3)
)
AS
begin
/* Procedure Text */
for
select --거래처별 현황
cast(a.gc_clcd as varchar(5)) CODE,
cast('1' as varchar(1)) KUBN,
cast(c.ad_clnm as varchar(40)) "외주처명",
cast(
substring(b.ga_krno from 1 for 1)||'-'||substring(b.ga_krno from 2 for 4)||'-'||
substring(b.ga_krno from 6 for 2)||'-'||substring(b.ga_krno from 8 for 3)
as varchar(15)) "JOB NO",
cast(b.ga_desc as varchar(50)) "건 명",
cast(d.cd_des1 as varchar(20)) "구 분",
cast(a.gc_amnt as numeric) "외주금액",
case when a.gc_sngb = '1' then cast(a.gc_amnt as numeric) end "선지급액",
cast(e.ad_clnm as varchar(40)) "광고주명",
cast(b.ga_jbcd as varchar(3)) JBCD
from tr140t a
left outer join tr110t b on a.gc_krno = b.ga_krno
left outer join client c on a.gc_clcd = c.ad_clcd
left outer join tr010t d on d.cd_iden = '1' and b.ga_jbcd = d.cd_code
left outer join client e on b.ga_clcd = e.ad_clcd
--================여기의 if문 이 꼭 필요한데요 에러나네요==============
if (:selt = '1') then --청구월기준이면 청구기간의 데이터를 가져와야 한다
where b.ga_cgdt >= :stdt and b.ga_cgdt <= :endt else
where b.ga_jsdt >= :stdt and b.ga_jsdt <= :endt
if (:tpcd <> 'T') then
and substring(b.ga_krno from 1 for 1) = :tpcd
if (:jbcd <> '' ) then
and b.ga_jbcd = :jbcd
if (:wjcd <> '' ) then
and a.gc_clcd = :wjcd
--==============================================================
and a.gc_clcd <> ''
union all
select --거래처별 계
cast(a.gc_clcd as varchar(5)) CODE,
cast('2' as varchar(1)) KUBN,
cast('' as varchar(40)) "외주처명",
cast('' as varchar(15)) "JOB NO",
cast('' as varchar(50)) "건 명",
cast('[소 계]' as varchar(20)) "구 분",
cast(sum(a.gc_amnt) as numeric) "외주금액",
case when max(a.gc_sngb) = '1' then cast(sum(a.gc_amnt) as numeric) end "선지급액",
cast('' as varchar(40)) "광고주명",
cast('' as varchar(3)) JBCD
from tr140t a
left outer join tr110t b on a.gc_krno = b.ga_krno
if (:selt = '1') then --청구월기준이면 청구기간의 데이터를 가져와야 한다
where b.ga_cgdt >= :stdt and b.ga_cgdt <= :endt else
where b.ga_jsdt >= :stdt and b.ga_jsdt <= :endt
if (:tpcd <> 'T') then
and substring(b.ga_krno from 1 for 1) = :tpcd
if (:jbcd <> '' ) then
and b.ga_jbcd = :jbcd
if (:wjcd <> '' ) then
and a.gc_clcd = :wjcd
and a.gc_clcd <> ''
group by a.gc_clcd
union all
select --전체계
cast('ZZZZZ' as varchar(5)) CODE,
cast('2' as varchar(1)) KUBN,
cast('' as varchar(40)) "외주처명",
cast('' as varchar(15)) "JOB NO",
cast('' as varchar(50)) "건 명",
cast('[소 계]' as varchar(20)) "구 분",
cast(sum(a.gc_amnt) as numeric) "외주금액",
case when max(a.gc_sngb) = '1' then cast(sum(a.gc_amnt) as numeric) end "선지급액",
cast('' as varchar(40)) "광고주명",
cast('' as varchar(3)) JBCD
from tr140t a
left outer join tr110t b on a.gc_krno = b.ga_krno
if (:selt = '1') then --청구월기준이면 청구기간의 데이터를 가져와야 한다
where b.ga_cgdt >= :stdt and b.ga_cgdt <= :endt else
where b.ga_jsdt >= :stdt and b.ga_jsdt <= :endt
if (:tpcd <> 'T') then
and substring(b.ga_krno from 1 for 1) = :tpcd
if (:jbcd <> '' ) then
and b.ga_jbcd = :jbcd
if (:wjcd <> '' ) then
and a.gc_clcd = :wjcd
and a.gc_clcd <> ''
into :CODE,:KUBN,:"외주처명",:"JOB NO",:"건 명",:"구 분",:"외주금액",
:"선지급액",:"광고주명",:JBCD
do
suspend;
end
|