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
운영게시판
최근게시물
PostgreSQL Q&A 9973 게시물 읽기
No. 9973
[질문] 날짜, rank기준으로 데이터를 가로로 나타낼려고 합니다.
작성자
문의드려요
작성일
2018-05-08 18:02ⓒ
2018-05-08 18:05ⓜ
조회수
5,394

WITH DT AS

(

SELECT '20180101' AS DATE_KEY ,'11' AS COL1 ,'A' AS COL2 ,'1A' AS COL3 UNION ALL

SELECT '20180202' AS DATE_KEY ,'22' AS COL1 ,'B' AS COL2 ,'2B' AS COL3 UNION ALL

SELECT '20180303' AS DATE_KEY ,'33' AS COL1 ,'C' AS COL2 ,'3C' AS COL3 UNION ALL

SELECT '20180404' AS DATE_KEY ,'44' AS COL1 ,'D' AS COL2 ,'4D' AS COL3 UNION ALL

SELECT '20180505' AS DATE_KEY ,'55' AS COL1 ,'E' AS COL2 ,'5E' AS COL3 UNION ALL

SELECT '20180606' AS DATE_KEY ,'66' AS COL1 ,'F' AS COL2 ,'6F' AS COL3

)

SELECT *

,RANK() OVER(ORDER BY DATE_KEY) AS RK

FROM DT

;

 

 

DATE_KEY COL1 COL2 COL3

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

20180101 11 A 1A

20180202 22 B 2B

20180303 33 C 3C

20180404 44 D 4D

20180505 55 E 5E

20180606 66 F 6F

 

위 데이터를 RK 기준으로 가로로 나타내고 싶습니다.

 

RK1 RK2 RK3 RK4 RK5 RK6

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

11 22 33 44 55 66

A B C D E F

1A 2B 3C 4D 5E 6F

 

어떻게 해야 할까요?

 

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

DATE_KEY를 기준으로 피벗하면 될것같은데...
쿼리를 직접 짜봐야 알겠네요..

youngba님이 2018-05-09 12:49에 작성한 댓글입니다. Edit

WITH dt AS
(
SELECT '20180101' date_key, '11' col1, 'A' col2, '1A' col3
UNION ALL SELECT '20180202', '22', 'B', '2B'
UNION ALL SELECT '20180303', '33', 'C', '3C'
UNION ALL SELECT '20180404', '44', 'D', '4D'
UNION ALL SELECT '20180505', '55', 'E', '5E'
UNION ALL SELECT '20180606', '66', 'F', '6F'
)
-- PIVOT --
SELECT lv
     , MIN(CASE rn WHEN 1 THEN col END) rn1
     , MIN(CASE rn WHEN 2 THEN col END) rn2
     , MIN(CASE rn WHEN 3 THEN col END) rn3
     , MIN(CASE rn WHEN 4 THEN col END) rn4
     , MIN(CASE rn WHEN 5 THEN col END) rn5
     , MIN(CASE rn WHEN 6 THEN col END) rn6
  FROM (-- UNPIVOT --
        SELECT lv
             , rn
             , CASE lv WHEN 1 THEN col1
                       WHEN 2 THEN col2
                       WHEN 3 THEN col3
                END col
          FROM (SELECT dt.*
                     , ROW_NUMBER() OVER(ORDER BY date_key) AS rn
                  FROM dt
                ) a
         CROSS JOIN
               (SELECT 1 lv
                UNION ALL SELECT 2
                UNION ALL SELECT 3
                ) copy_t
        ) a
 GROUP BY lv
;

마농(manon94)님이 2018-05-09 16:13에 작성한 댓글입니다.

감사합니다.

문의드려요님이 2018-05-11 10:13에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
9976인덱스 함수중에 어떤함수가 적절한지.. [1]
test
2018-05-14
5615
9975쿼리 조회시 조건절 외 결과값이 같이 출력됩니다. [2]
뽀그리초보
2018-05-11
5895
9974[질문] 서비스가 대부분 프로시저로 구현 될 경우 문제는 없는지? [2]
나그네
2018-05-09
5723
9973[질문] 날짜, rank기준으로 데이터를 가로로 나타낼려고 합니다. [3]
문의드려요
2018-05-08
5394
9972게임DB에서 유저의 특정 로직마다 Table I/O 비용 계산법? [2]
youngba
2018-05-07
5539
9971Listen / Notify 구현이 eclipse에서 작동이 안 되네요.. [2]
김창권
2018-05-04
5779
99701:n 조회 [6]
초보
2018-04-30
5238
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다