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
운영게시판
최근게시물
Oracle Q&A 38735 게시물 읽기
No. 38735
세로를 가로로 변환하는 쿼리_재문의
작성자
레이첼
작성일
2011-07-25 17:26ⓒ
2011-07-27 13:46ⓜ
조회수
12,274

현재

상품코드 상품명 총판매수량
상품코드 상품명 총판매수량
상품코드 상품명 총판매수량

 에서 각각의 상품코드명을 클릭하면

체인점1_판매수량
체인점2_판매수량
체인점3_판매수량
 와 같이 나옵니다. 이것을 맨 아래처럼 할려고 아래와 같이 만들고

상품코드

상품명 총판매수량 체인점1_판매수량
상품코드 상품명 총판매수량 체인점2_판매수량
상품코드 상품명 총판매수량 체인점3_판매수량

다시한번 pivot으로 해야 할거 같은데..

상품코드 상품명 총판매수량 체인점1_판매수량 체인점2_판매수량 체인점3_판매수량

오라클 에서도 PIVOT 이라는 걸루 가로세로 변환하는지요;;
세로를 가로로 변환하고 싶은데 모르겠네요;;
체인점4,5,6,,,,이렇게 동적으로 해야 하는데 가능하다면 좋고
아니면 그냥 기본적으로 7개쯤 정해서라도 해야 합니다;;

질문이 두서없어 죄송합니다. 저런 순서로 해야하는게 맞는지도 모르겠구요
도와주시면 감사하겠습니다

 

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

WITH t AS
(
SELECT 'P01' pcd, '상품1' pnm, '체인점1' cnm, 100 cnt FROM dual
UNION ALL SELECT 'P01', '상품1', '체인점2', 200 FROM dual
UNION ALL SELECT 'P01', '상품1', '체인점3', 300 FROM dual
)
SELECT pcd, pnm
     , SUM(cnt) tot
     , SUM(DECODE(cnm, '체인점1', cnt)) cnt_1
     , SUM(DECODE(cnm, '체인점2', cnt)) cnt_2
     , SUM(DECODE(cnm, '체인점3', cnt)) cnt_3
     , SUM(DECODE(cnm, '체인점4', cnt)) cnt_4
     , SUM(DECODE(cnm, '체인점5', cnt)) cnt_5
     , SUM(DECODE(cnm, '체인점6', cnt)) cnt_6
     , SUM(DECODE(cnm, '체인점7', cnt)) cnt_7
  FROM t
 GROUP BY pcd, pnm;
;


WITH t AS
(
SELECT 'P01' pcd, '상품1' pnm, '체인점1' cnm, 100 cnt FROM dual
UNION ALL SELECT 'P01', '상품1', '체인점2', 200 FROM dual
UNION ALL SELECT 'P01', '상품1', '체인점3', 300 FROM dual
)
-- 11G New Feature - PIVOT
SELECT *
  FROM (SELECT pcd, pnm, cnm, cnt
             , SUM(cnt) OVER() tot
          FROM t )
 PIVOT (SUM(cnt) FOR cnm IN ( '체인점1' AS cnt_1
                            , '체인점2' AS cnt_2
                            , '체인점3' AS cnt_3
                            , '체인점4' AS cnt_4
                            , '체인점5' AS cnt_5
                            , '체인점6' AS cnt_6
                            , '체인점7' AS cnt_7
                            ) )
;

마농(manon94)님이 2011-07-26 09:29에 작성한 댓글입니다.

10g인데 pivot 사용못하나요 ㅠㅠ

그럼 pivot 없이 사용하는것좀 알려주세요;;

레이첼님이 2011-07-26 11:01에 작성한 댓글입니다.
이 댓글은 2011-07-26 13:06에 마지막으로 수정되었습니다. Edit

 답글에 이미 두가지 방식 올렸는데요 ㅡ,.ㅡ

마농(manon94)님이 2011-07-26 13:51에 작성한 댓글입니다.
이 댓글은 2011-07-26 13:51에 마지막으로 수정되었습니다.

가로로 변환한때 체인점 1,2,3 이라는 것은 예시이고

체인점의 갯수가 많고 동적입니다. 100개 넘고 데이타가 없는 체인점도 있습니다.

, SUM(DECODE(cnm, '체인점1', cnt)) cnt_1
 

이런것처럼 일일이 정해줄순없을거 같은데...동적으로 체인점이름들이 가로로 갈수는 없나요;

 

레이첼님이 2011-07-27 13:48에 작성한 댓글입니다. Edit

RDB 는 2차원 테이블 구조로 표현이 되며
열은 고정이며 행이 동적으로 늘어나는 구조이지요.
고정적인 열을 가변적으로 표현하는 sql은 없구요.
SQL 자체를 동적으로 구현하는 방법은 있을 수 있겠죠.
SQL을 동적으로 만들어 내시면 됩니다.
모든 체인점을 우선 가져와 루프 돌려가며
쿼리에 sum(decode 부분을 붙여나가시면 됩니다.
그런데 100개 이상을 이런식으로 표현하실건가요?
Group by 연산할때 너무 많은 deode가 나와도 에러가 나더군요.


테이블 구조가 아닌 XML구조로 표현하는 방법이 있긴 합니다만...

마농(manon94)님이 2011-07-29 09:25에 작성한 댓글입니다.

체인점 갯수는 100개인데... 뿌려주는거는 15개 미만이라고 하네요;;

일단 화면단 구조를 바꾸었습니다;;

가능하다고 해도 어려워서;;

XML구조로 하는 방법은 처음 들어서;;

답변 정말 감사합니다

 

레이첼님이 2011-08-01 15:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
38738쿼리문의 [2]
레이첼
2011-07-26
4197
38737CREATE TABLE ~ AS SELECT 시 컬럼 크기 변경 [2]
장동신
2011-07-26
4614
38736중복제거 질문 ^^ 급합니다. [1]
이병헌
2011-07-26
4604
38735세로를 가로로 변환하는 쿼리_재문의 [6]
레이첼
2011-07-25
12274
38733여러개 컬럼값중 상위 2개값 가져 오기 [1]
박상준
2011-07-25
5312
38732이상하게 안되는 조인..ㅠ [3]
후덜덜
2011-07-25
4249
38731고수님들!! ORA-24344 에러좀 봐주세요~~
박용선
2011-07-23
9855
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다