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 4438 게시물 읽기
No. 4438
눕혀서 출력해야하는데 어려워요.
작성자
이상철(hiscom)
작성일
2008-09-09 14:34ⓒ
2008-09-09 14:36ⓜ
조회수
6,271

case를 쓰면 해결된다고 하는데 도대체 되질 않습니다.
도와주세요.


(테이블)

상환일자    원금   이자  잔액
---------------------------
2008-05-25 10000 1000 121000
2008-06-25 10000 1000 110000
2008-07-25 10000 1000 99000
2008-08-25 10000 1000 88000
2008-09-25 10000 1000 77000
2008-10-25 10000 1000 66000
2008-11-25 10000 1000 55000
2008-12-25 10000 1000 44000
2009-01-25 10000 1000 33000
2009-02-25 10000 1000 22000
2009-03-25 10000 1000 11000
2009-04-25 10000 1000 0



(출력)

연도   구분     1월      2월      3월      4월      5월       6월        7월       8월       9월      10월    11월   12월
---------------------------------------------------------------------------------------------------
2008   원금     null     null      null     null     10000    10000     10000    10000    10000   10000   10000  10000
2008   이자     null     null      null     null     1000      1000      1000      1000     1000     1000    1000    1000
2008   잔액     null     null      null     null     121000   110000   99000     88000   77000   66000   55000   44000

2009   원금     10000  10000   10000   10000   null       null       null       null      null      null     null      null
2009   이자     1000   1000     1000     1000    null       null       null       null      null      null     null      null
2009   잔액     33000  22000   11000    0        null       null       null       null      null      null     null      null

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

 

create table test(상환일자 char(10),원금 int,이자 int,잔액 int)

insert test

select '2008-05-25',10000,1000,121000 union all

select '2008-06-25',10000,1000,110000 union all

select '2008-07-25',10000,1000,99000 union all

select '2008-08-25',10000,1000,88000 union all

select '2008-09-25',10000,1000,77000 union all

select '2008-10-25',10000,1000,66000 union all

select '2008-11-25',10000,1000,55000 union all

select '2008-12-25',10000,1000,44000 union all

select '2009-01-25',10000,1000,33000 union all

select '2009-02-25',10000,1000,22000 union all

select '2009-03-25',10000,1000,11000 union all

select '2009-04-25',10000,1000,0

 

-----------------------------------------------

select year(상환일자) 연도,

       구분,

       sum(case datepart(mm,상환일자) when 1 then 금액 end) [1],

       sum(case datepart(mm,상환일자) when 2 then 금액 end) [2],

       sum(case datepart(mm,상환일자) when 3 then 금액 end) [3],

       sum(case datepart(mm,상환일자) when 4 then 금액 end) [4],

       sum(case datepart(mm,상환일자) when 5 then 금액 end) [5],

       sum(case datepart(mm,상환일자) when 6 then 금액 end) [6],

       sum(case datepart(mm,상환일자) when 7 then 금액 end) [7],

       sum(case datepart(mm,상환일자) when 8 then 금액 end) [8],

       sum(case datepart(mm,상환일자) when 9 then 금액 end) [9],

       sum(case datepart(mm,상환일자) when 10 then 금액 end) [10],

       sum(case datepart(mm,상환일자) when 11 then 금액 end) [11],

       sum(case datepart(mm,상환일자) when 12 then 금액 end) [12]

 from (select a.상환일자,

              b.구분,

              case b.구분 when '원금' then a.원금

                          when '이자' then a.이자

                          when '잔액' then a.잔액

              end 금액

         from test a,(select '원금' 구분 union all select '이자' union all select '잔액') b) t

group by year(상환일자),구분

order by year(상환일자),구분

 

/*

연도   구분   1    2    3    4    5    6    7    8    9    10   11   12

----------- ---- ----------- ----------- ----------- ----------- ----------- -----

2008   원금   NULL   NULL   NULL   NULL   10000  10000  10000  10000  10000  10000  10000  10000

2008   이자   NULL   NULL   NULL   NULL   1000   1000   1000   1000   1000   1000   1000   1000

2008   잔액   NULL   NULL   NULL   NULL   121000 110000 99000  88000  77000  66000  55000  44000

2009   원금   10000  10000  10000  10000  NULL   NULL   NULL   NULL   NULL   NULL   NULL   NULL

2009   이자   1000   1000   1000   1000   NULL   NULL   NULL   NULL   NULL   NULL   NULL   NULL

2009   잔액   33000  22000  11000  0      NULL   NULL   NULL   NULL   NULL   NULL   NULL   NULL

경고: 집계 또는 다른 SET 연산에 의해 Null 값이 제거되었습니다.

 

(6 적용됨)

*/

최석준(beatchoi)님이 2008-09-09 14:53에 작성한 댓글입니다.

최석준님 감사합니다. ^^

case 정말 좋군요. 
님이 짜주신 소스를 보니 상당히 많은 곳에 응용이 될 것 같습니다.
감사합니다.

이상철(hiscom)님이 2008-09-09 15:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4442[ 질문 ] ms sql 2005 백업방법(전체 DB 백업후 HDD 포멧 후 복구 방법) [2]
김찬수
2008-09-11
7367
4441여러테이블의 값을 join해서 하나의 칼럼으로 만들고 싶습니다. [1]
이상재
2008-09-11
5723
4440sum()과 count()가 이상해용
황병득
2008-09-10
5457
4438눕혀서 출력해야하는데 어려워요. [2]
이상철
2008-09-09
6271
44370시 부터 24시의 쿼리 [1]
궁금이
2008-09-08
6187
4436Data truncation 오류가 나는대 안나게 할 수 없나요? [4]
syb
2008-09-05
10548
4435한글이 깨집니다.
김홍원
2008-09-03
5256
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다