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 3861 게시물 읽기
No. 3861
쿼리좀 만들어 주십시오 아니면 조언이라도 해주시길 바랍니다.
작성자
mssql초보
작성일
2007-11-07 22:37ⓒ
2007-11-07 22:41ⓜ
조회수
3,130

테이블 형식은 다음과 같습니다.
 
 이름   월          월임대료       비용        납입금액   
 aaaa  2007-11  ₩1,000         ₩0          ₩0   
 bbbb  2007-09  ₩1,000         ₩20,000   ₩0   
 bbbb  2007-12  ₩1,000         ₩20,000   \21000   
 cccc  2007-10  \1000          ₩0          \1000 

위와 같이 되어 있을 경우 크로스탭 형태로 아래와 같이 출력하려고 합니다.

       01     02     03     04 ...(생략).... 09      10      11      12
aaaa                                                            1000
(납입금액)                                                       0
------------------------------------------------------------------
bbbb                                           21000                   21000 
(납입금액)                                       0                      21000
------------------------------------------------------------------
cccc                                                    1000
(납입금액)                                               0


이와 같이 월임대료(월임대료+비용) 과 납입금액 을 위와 같이 표시 할 수 있을련지요.
아직 쿼리에 대해 잘 이해를 하지 못하고 있네요.

해당 년에 대한 월들을 위의 데이터에서 추출하여 위와같은 테이블로 표시하려고 합니다.




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

CREATE TABLE TBL_TTT
( NM CHAR(10)
, MM CHAR(7)
, PR INT
, COST INT
, IN_COST INT )
GO

INSERT INTO TBL_TTT
 SELECT * FROM
 (
  SELECT  NM = 'AAAA', MM = '2007-11', PR = 1000, COST = 0     , IN_COST = 0     UNION ALL
  SELECT  NM = 'BBBB', MM = '2007-09', PR = 1000, COST = 20000 , IN_COST = 0     UNION ALL
  SELECT  NM = 'BBBB', MM = '2007-12', PR = 1000, COST = 20000 , IN_COST = 21000 UNION ALL  
  SELECT  NM = 'CCCC', MM = '2007-10', PR = 1000, COST = 0     , IN_COST = 1000 
 ) X
GO

CREATE TABLE TBL_DUM
(SEQ INT)
GO


INSERT INTO TBL_DUM
 SELECT 1 UNION ALL  
 SELECT 2 UNION ALL  
 SELECT 3 UNION ALL  
 SELECT 4 UNION ALL  
 SELECT 5 UNION ALL  
 SELECT 6 UNION ALL  
 SELECT 7 UNION ALL  
 SELECT 8 UNION ALL  
 SELECT 9 UNION ALL  
 SELECT 10 UNION ALL  
 SELECT 11 UNION ALL  
 SELECT 12
GO

SELECT
 NM
 , R_NM
 , [09] = MAX(CASE WHEN MM = 9 THEN PR ELSE NULL END)
 , [10] = MAX(CASE WHEN MM = 10 THEN PR ELSE NULL END)  
 , [11] = MAX(CASE WHEN MM = 11 THEN PR ELSE NULL END)
 , [12] = MAX(CASE WHEN MM = 12 THEN PR ELSE NULL END)
 
FROM
(
 SELECT
  NM
  , MM
  , SEQ
  , R_NM = CASE WHEN SEQ = 1 THEN NM ELSE '(납입금액)' END
  , PR = CASE WHEN SEQ = 1 THEN PR ELSE IN_COST END
 FROM
  (SELECT * FROM TBL_DUM WHERE SEQ BETWEEN 1 AND 2 ) A
  CROSS JOIN
  (SELECT NM, MM = RIGHT(MM, 2), PR, IN_COST FROM TBL_TTT) B
) Y
GROUP BY NM, R_NM
ORDER BY NM, R_NM DESC

.님이 2007-11-08 10:42에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3866인증사양이 뭐죠?; [1]
토스트
2007-11-08
4745
3863이거좀 해결해주세요 [1]
한창경
2007-11-08
3511
3862mysql limit을 mssql로 변환도중 질문드립니다. [1]
키즈리턴
2007-11-08
3304
3861쿼리좀 만들어 주십시오 아니면 조언이라도 해주시길 바랍니다. [1]
mssql초보
2007-11-07
3130
3860NULL이 아닌것만... [4]
초보
2007-11-07
4028
3859특정 IP 만 접속 허용하게 하려면?? [1]
질문
2007-11-07
4003
3858varchar 타입의 숫자값을 정렬하고자 할때
손님
2007-11-07
3371
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다