고수님들 보아 주세요.
이곳에 몇번의 질문을 올렸는데 아시는 분이 적은 탓인지 아님 제가 질문을 잘못
올리는 것인지.. 모쪼록 다시한번 고수님들의 조언을 듣고자 합니다.
전 현재 Delphi 4.0과 Paradox DB를 사용하여 제품 입/출고 프로그램을 하고 있습니다.
Query를 활용하여 DBGrid에 표현하는 방법에 대한 문제입니다.
제가 Table 설계를 잘못한 것이라면 Table 설계에 대한 조언을 부탁드리며 또는
Query 구성을 잘못한 것이라면 Query 부분을 조언을 해주시면 감사드리겠습니다.
#.Table : Mast
dday (A:10) : 입출고 일자
sqno (N) : 일련번호
iosw (A:1) : 입고(-)/출고(+)
pcod (A:5) : 제품코드
qtyn (N) : 수량
cost ($) : 단가
amtn ($) : 금액
#.SQL Query
select dday, sqno, iosw, pcod, qtyn, cost, amtn
from mast
union
select dday, 999, 'T', ' ', sum(qtyn), 0, sum(amtn)
from mast
group by dday
union
select ' 총 계 ', 9999, 'T', ' ', sum(qtyn), 0, sum(amtn)
from mast
#.DBGrid
2003-01-01/ 1/-/A0101/ 15/ 1000/ 15000
2003-01-01/ 2/-/A0101/ 20/ 2000/ 40000
2003-01-01/ 3/+/A0101/ 10/ 1200/ 12000
2003-01-01/ 4/+/A0101/ 15/ 1200/ 18000
*2003-01-01/ 999/T/ / 60/ 0/ 85000
2003-01-02/ 1/-/A0101/ 20/ 1000/ 20000
2003-01-02/ 3/+/A0101/ 10/ 1200/ 12000
2003-01-02/ 4/+/A0101/ 15/ 1200/ 18000
*2003-01-02/ 999/T/ / 45/ 0/ 50000
* 총 계 /9999/T/ /105/ 0/135000
제가 구현한 SQL Query문으론 위와 같은 DBGrid가 생성되는데...
전 다음과 같이 만들고 싶습니다.
#.DBGrid (New)
2003-01-01/ 1/-/A0101/ 15/ 1000/ 15000
2003-01-01/ 2/-/A0101/ 20/ 2000/ 40000
2003-01-01/ 3/+/A0101/ 10/ 1200/ 12000
2003-01-01/ 4/+/A0101/ 15/ 1200/ 18000
*2003-01-01/ 999/T/ /-10/ 0/-25000
2003-01-02/ 1/-/A0101/ 20/ 1000/ 20000
2003-01-02/ 3/+/A0101/ 10/ 1200/ 12000
2003-01-02/ 4/+/A0101/ 15/ 1200/ 18000
*2003-01-02/ 999/T/ / 5/ 0/ 10000
* 총 계 /9999/T/ / -5/ 0/-15000
고수님들 저의 고민을 해결해 주실수 있는 분은 어디에 계신지요?
전 다소 바쁘지만... 저의 Table 설계부분이 잘못된 것이라면 어떤식으로
설계를 해야 할지..아님 Query 구현 방안을 알려 주시면 고맙겠습니다.
많은 고수님들의 아낌없는 조언을 부탁드립니다.
전 이렇게 함 풀어 봤습니다.
CREATE TABLE TMP1 (
dday VARCHAR2(10),
sqno NUMBER,
iosw VARCHAR2(1),
pcod VARCHAR2(5),
qtyn NUMBER,
cost NUMBER,
amtn NUMBER
)
/
INSERT INTO TMP1 VALUES('2003-01-01', 1, '-', 'A0101', 15, 1000, 15000);
INSERT INTO TMP1 VALUES('2003-01-01', 2, '-', 'A0101', 20, 2000, 40000 );
INSERT INTO TMP1 VALUES('2003-01-01', 3, '+', 'A0101', 10, 1200, 12000 );
INSERT INTO TMP1 VALUES('2003-01-01', 4, '+', 'A0101', 15, 1200, 18000 );
INSERT INTO TMP1 VALUES('2003-01-02', 1, '-', 'A0101', 20, 1000, 20000 );
INSERT INTO TMP1 VALUES('2003-01-02', 3, '+', 'A0101', 10, 1200, 12000 );
INSERT INTO TMP1 VALUES('2003-01-02', 4, '+', 'A0101', 15, 1200, 18000 );
SELECT DECODE(J, 3, '합계', DDAY)
, DECODE(J, 3, '합계', 2, '중계', SQNO)
, MIN(IOSW)
, MIN(PCOD)
, SUM(IOSW||QTYN)
, SUM(IOSW||COST)
, SUM(IOSW||AMTN)
FROM TMP1, (SELECT 1 J FROM DUAL
UNION ALL
SELECT 2 FROM DUAL
UNION ALL
SELECT 3 FROM DUAL
)
GROUP BY DECODE(J, 3, '합계', DDAY)
, DECODE(J, 3, '합계', 2, '중계', SQNO)
이렇게 하면 일단 결과는 나오는데. 약간 해결 하지 못한 것은..
각 로우마다 '-' 넘이 붙어서 나오네여. ^^;;
지금은 시간이 늦어서리.. 나중에 시간이 나면... 다시.. ^^;;
그럼. 수고하세여. ~