database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6313 게시물 읽기
No. 6313
화면 배열 문제...
작성자
말짝이
작성일
2012-01-18 07:52ⓒ
2012-01-18 13:57ⓜ
조회수
6,861

좀 도와주세요.

먼저 원하는 결과물입니다.

 프로젝트코드

 계약금액

 입금일

 입금액

 출금일

 출금액

 PJT-01

 18,000

 2012.01.01

2,500 

2012.01.03 

 3,000

 

 

 

 

2012.01.06

 6,000

PJT-02 

25,000 

2012.01.04 

8,000 

2012.01.15

8,000 

 

 

2012.01.10 

 15,000

2012.01.17 

15,000 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

위와 같은 형식인데요.

문제는 테이블이 프로젝트 정보 테이블, 입금정보테이블, 출금정보 테이블 모두 별도로 있다보니

각 테이블 프로젝트별 group by로 해서 가져오면 아래처럼 표현이 되어 난감합니다.

제발 해결책좀 부탁드립니다.

 

 

 프로젝트코드

 계약금액

 입금일

 입금액

 출금일

 출금액

 PJT-01

 18,000

 

 

 

 

 

 

2012.01.01 

2,500 

 

 

 

 

 

 

2012.01.03

3,000

 

 

 

 

2012.01.06

6,000

PJT-02 

25,000 

 

 

 

 

 

 

2012.01.04  

8,000  

 

 

 

 

2012.01.10  

15,000 

 

 

 

 

 

 

2012.01.15 

8,000  

 

 

 

 

2012.01.17 

15,000  

 

참고로 SQL2000입니다.

이 글에 대한 댓글이 총 2건 있습니다.

 with prj( pcd, amt )

as
(
select 1, 18000
union all select 2, 25000
),
incm( icd, pcd, idt, iamt )
as
(
select 1, 1, '2012-01-01', 2500
union all select 2, 2, '2012-01-04', 8000
union all select 3, 2, '2012-01-10', 15000
),
outcm( ocd, pcd, odt, oamt )
as
(
select 1, 1, '2012-01-03', 3000
union all select 2, 1, '2012-01-06', 6000
union all select 3, 2, '2012-01-15', 8000
union all select 4, 2, '2012-01-17', 15000
)
 
select 
case when 1 = ROW_NUMBER() over ( partition by prj.pcd order by isnull( inout.icd, 1000) asc, isnull( inout.ocd, 1000 ) asc ) then cast( prj.pcd as varchar(10) ) else '' end as pcd
, case when 1 = ROW_NUMBER() over ( partition by prj.pcd order by isnull( inout.icd, 1000) asc, isnull( inout.ocd, 1000 ) asc ) then cast( prj.amt as varchar(10) ) else '' end as amt
, inout.idt, inout.iamt, inout.odt , inout.oamt
from 
prj
inner join
(
select isnull( inl.pcd, outl.pcd ) as pcd, 
inl.icd, inl.idt, inl.iamt, outl.ocd, outl.odt, outl.oamt
from
( select ROW_NUMBER() over ( partition by incm.pcd order by incm.icd asc) as rid
, incm.*
from incm 
) as inl
full outer join
( select ROW_NUMBER() over ( partition by outcm.pcd order by outcm.ocd asc) as rid
, outcm.*
from outcm 
) as outl on inl.pcd = outl.pcd and inl.rid = outl.rid
) as inout on prj.pcd = inout.pcd
order by prj.pcd, isnull( inout.icd, 1000) asc, isnull( inout.ocd, 1000 ) asc
 
우욱님이 2012-01-18 10:21에 작성한 댓글입니다. Edit

ㅠㅠ. 너무 어려워요. 좀더 쉬운방법없어요??

말짝이님이 2012-01-18 10:39에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6316데이터 타입 변경 시 에러 발생 [1]
moon
2012-01-31
10242
6315에러가 자주 생겨요
정명규
2012-01-27
6620
6314vb와 ms-sql연동
냠냠
2012-01-19
7171
6313화면 배열 문제... [2]
말짝이
2012-01-18
6861
6311쿼리로 ROWSPAN 효과내기 [1]
초보
2012-01-16
6909
6310컬럼의 값을 카운트 하려면? [1]
초보자
2012-01-15
6807
6309select 쿼리 질문입니다. [2]
유재영
2012-01-13
7388
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.028초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다