안녕하세요... 델파이 초보입니다...
프로그램을 구성하면서 SQL에 관해 몇가지 질문이 있어서 이렇게 고수님들에 가르침을 바라고 글을 올립니다...
먼저, DELPHI6.0에 PARADOX DB를 사용하고요 등록,수정,삭제 거의 모두를 Query로 사용하고 있습니다...
다음과 같은 상황에서 몇가지 질문이 생기더군요...
하나의 DBGrid에서 다음과 같은 내용을 표현하고 싶습니다...
"거래처코드, 거래처명, 거래금액, 결재금액, 잔금"
그래서 다음과 같이 SELECT문을 구성하는데 이중 잔금부분의 조건이 틀립니다..
SELECT 거래처명, SUM(금액) 거래금액, SUM(입금-출금) 결재금액, SUM(잔금) 잔금 FROM 전표 WHERE 일자 = 조회일자 GROUP BY 거래처명
물론 조회일자는 변수명입니다...
이중 거래금액이나 결재금액은 산출조건은 "일자 = 조회일자"인데
잔금산출의 조건은 "일자 <= 조회일자"이어야 하거든요...
전에 VISUAL FOXPRO를 사용할때는 각각 데이터를 산출하여 임시화일로 저장하고 둘을 병합하였습니다...
그런데 DELPHI에서 Query로 생성한 결과는 화일로 어떻게 저장이 안되더군요...
그래서 무슨 방법이 없나 아무리 찾아봐서 마따한 답이 없습니다...
질문1. 하나의 DBGrid에 서로 다른 조건으로 검색된 사항을 표시할 수 있는 방법이 없는가 하는것이구요...
질문2. FOXPRO에서는 SELECT 문 마지막에 "INTO TABLE 화일명"하던가 SELECT문을 끝낸후 "COPY TO 화일명"을 해서 화일로 저장을 해서 해당화일을 이용했거든요...
DELPHI에는 그런기능이 없는지요...
INTO TABLE 명령을 사용하니깐 에러가 나더군요...
다른 ORACLE이나 SQL DB는 기능이 있다고 하시던데 PARADOX에는 없는건지...
질문3. SELECT 문에 UNION이라는 구문이 있던데 설명이 자세히 된것이 없더군요... 어떻게 사용하는건지 SAMPLE이나 설명을 해주실수는 없는지요...
고수님들, 이 초보를 위해 수고스러우시겠지만 가르침을 주십시요...
꼭 꼭 꼭 가르침을 주십시요....^^
속도 또는 관리 측면에서 조금 더 고려하신후 적당한것으로 구현해보세요...
1. Join 사용
SELECT A.거래처명, A.거래금액, A.결재금액, B.잔금
FROM ( SELECT 거래처명,
SUM(금액) 거래금액,
SUM(입금-출금) 결재금액
FROM 전표
WHERE 일자 = 조회일자
GROUP BY 거래처명 ) A,
( SELECT 거래처명,
SUM(잔금) 잔금
FROM 전표
WHERE 일자 <= 조회일자
GROUP BY 거래처명 ) B
WHERE A.거래처명 = B.거래처명;
2. Union 사용
SELECT 거래처명, SUM(거래금액), SUM(결재금액), SUM(잔금)
FROM ( SELECT 거래처명,
SUM(금액) 거래금액, SUM(입금-출금) 결재금액, 0 잔금
FROM 전표
WHERE 일자 = 조회일자
GROUP BY 거래처명
UNION ALL
SELECT 거래처명, 0, 0, SUM(잔금)
FROM 전표
WHERE 일자 <= 조회일자
GROUP BY 거래처명 )
GROUP BY 거래처명 );