오라클 세로를 가로로 변경하고 싶어요. 0 2 2,230

by 배우는재미 [Oracle 기초] 세로 가로 [2020.12.04 09:39:56]


데이터가 이렇게 있습니다. 

체크항목수는 고정이며, 사람1~5 리스트수는 변동 됩니다.

항목 체크1 체크2 체크3 체크4 체크5 특이사항
사람1 O X O O O  
사람2 X O O O X  
사람3 O O X X O 특이사항입니다.
사람4 O X O O O  
사람5 O O O O X  

 

이렇게 조회되게 변경 하고 싶습니다.

특이사항은 모든 사람들의 '비고' 컬럼 값이 있는값으로 보여줘야 합니다.

(비고는 사람수와 무관하게 한사람에게만 등록되거나 전체 사람에게 미등록됨)

항목 사람1 사람2 사람3 사람4 사람5
체크1 O X O O O
체크2 X O O X O
체크3 O O X O O
체크4 O O X O O
체크5 O X O O X
비고 특이사항입니다.

 

가능할지 모르겠지만 고수님들 부탁 드립니다.

 

by 마농 [2020.12.04 10:32:18]

1. SQL 만으로는 가변적인 정보를 컬럼으로 구현할 수는 없습니다.
- 고정으로 개수와 값을 정확하게 알고 있어야 가능 합니다.
- 가변으로 하려면 동적쿼리 형태로 구현해야 합니다.
2. 엑셀과 같은 셀병합 기능은 없습니다.
 

WITH t AS
(
SELECT '사람1' id, 'O' c1, 'X' c2, 'O' c3, 'O' c4, 'O' c5, '' bigo FROM dual
UNION ALL SELECT '사람2', 'X', 'O', 'O', 'O', 'X', '' FROM dual
UNION ALL SELECT '사람3', 'O', 'O', 'X', 'X', 'O', '특이사항입니다.' FROM dual
UNION ALL SELECT '사람4', 'O', 'X', 'O', 'O', 'O', '' FROM dual
UNION ALL SELECT '사람5', 'O', 'O', 'O', 'O', 'X', '' FROM dual
)
SELECT *
  FROM t
 UNPIVOT (c FOR gb IN ( c1   AS '체크1'
                      , c2   AS '체크2'
                      , c3   AS '체크3'
                      , c4   AS '체크4'
                      , c5   AS '체크5'
                      , bigo AS '비고'
                      ) )
 PIVOT (MIN(c) FOR id IN ( '사람1' 사람1
                         , '사람2' 사람2
                         , '사람3' 사람3
                         , '사람4' 사람4
                         , '사람5' 사람5
                      -- , '사람6' 사람6
                         ) )
 ORDER BY NULLIF(gb, '비고')
;

 


by 배우는재미 [2020.12.04 10:39:17]

마농님 정말 감사합니다 ^^

항상 궁금한부분 있으면 찾아보고 있는데

마농님과 다른 몇분들의 답변을 항상 잘 참고 하고 있습니다.

항상 답변 가르침 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입