***** 아래의 3434번글에 이어서 드리는 질문 입니다. *****
이 곳에서 도움을 많이 받고 있는 SQL입문자 입니다.
테이블 bill(메인테이블) 과 man 이 연결 되어 있구요.
bill 테이블의 GrandTotal 과 SubTotal이 값이 있으면
레코드를 분리해서 두개를 만들었습니다.
(GrandTotal 과 SubTotal에 값이 같이 있으면 masterman 과 subman 필드에도 값이 들어 있습니다.)
이곳의 고수 분들의 도움을 받아 아래와 같은 쿼리를 작성했는데
Group 에서 막혀 이렇게 또 도움을 청합니다.
Bill 이라는 한개의 테이블에
=====================================================================
a_id invdate Cuscod masterman subman GrandTotal SubTotal
=====================================================================
1 20080120 0001 01 400 0
2 20080120 0002 02 01 500 200 -->2개로 나눠짐
3 20080120 0003 03 100 0
4 20080120 0003 03 04 300 100 -->2개로 나눠짐
=====================================================================
이라는 4개의 레코드가 있는데 이중에
SubTotal 필드의 값이 0인경우엔(subman가 자료가 없음) 레코드가 그대로 보여지고
0이 아니경우엔(subman에 특정 자료가 있음) 레코드들 하나 추가해서 WHERE masterman between '01' AND '99' 하는식의 조건을 걸고
아래와 같이 보여주는 방법은 없는지요 고수님들의 도움을 부탁 드립니다.
cross join을 사용하면 된다고 하는데... 제가 너무 초보라서요.
=============================================================================
a_id invdate Cuscod masterman subman GrandTotal SubTotal
=============================================================================
1 20080120 0001 01 400 0 SubTotal이 0이므로 불변
-----------------------------------------------------------------------------
2 20080120 0002 02 300 0 두개로 분리 하여 합하면
3 20080120 0002 01 200 0 기존레코드 1개와 일치
-----------------------------------------------------------------------------
4 20080120 0003 03 100 0 SubTotal이 0이므로 불변
-----------------------------------------------------------------------------
5 20080120 0003 03 200 0 두개로 분리 하여 합하면
6 20080120 0003 04 100 0 기존레코드 1개와 일치
=============================================================================
Group1 = masterman 또는 man_user_serial
Group2 = yymm
Group3 = cuscod
를 이용해서
======================================================================
masterman yymm cuscod Sum( amount )
======================================================================
01 0801 0001 400
01 0801 0002 200
----------------------------------------------------------------------
02 0801 0002 300
----------------------------------------------------------------------
03 0801 0003 300(위 4번과 5번레코드의 합)
----------------------------------------------------------------------
04 0801 0003 100
----------------------------------------------------------------------
과 같은 자료를 얻고 싶은데 어찌하면 좋을지 도움을 부탁 드립니다.
SELECT Q.* FROM ( SELECT
masterman = CASE WHEN X = 1 THEN A.masterman ELSE A.subman END ,
yymm = mid(Left(A.invdate,3,4) ,
cuscod = A.cuscod ,
amount = CASE WHEN X = 1 THEN A.GrandTotal - A.SubTotal ELSE A.SubTotal END ,
man_user_name_kor = Man.user_name_kor ,
man_user_taxno = Man.user_taxno ,
man_user_serial = Man.user_serial ,
invdate = A.invdate ,
subman = A.subman ,
taxornot = A.taxornot ,
two_comp = A.two_comp
FROM bill A CROSS JOIN ( SELECT X = 1 UNION ALL SELECT 2 ) B , man , palet ) Q
WHERE
( masterman = man_user_hobong ) AND
( invdate between '20080101' AND '20080228' ) AND
((masterman between '01' AND '99' ) OR
( subman between '01' AND '99' )) AND
( taxornot = 0 ) AND ( amount > 0 ) AND
( two_comp = 0 )
여기까진 도움을 받아 했는데 group을 이용한 결과를 얻질 못하고 있습니다.
도움을 부탁 드립니다.
|