[SQL] "피벗"테이블 오라클은 - 어떻게 컬럼에 행 항목을 변경하려면
SQL"피벗"테이블 오라클은 - 어떻게 컬럼에 행 항목을 변경하려면
나는 다음과 같은 간단한 예제를 가지고 :
CREATE TABLE Cars ( Cars, Item, Value ) AS
SELECT 'bmw', 'wheels', '4' FROM DUAL UNION ALL
SELECT 'bmw', 'color', 'red' FROM DUAL UNION ALL
SELECT 'bmw', 'price', '5' FROM DUAL UNION ALL
SELECT 'mercedes', 'wheels', '4' FROM DUAL UNION ALL
SELECT 'mercedes', 'color', 'black' FROM DUAL UNION ALL
SELECT 'lambo', 'wheels', '5' FROM DUAL UNION ALL
SELECT 'lambo', 'color', 'yellow' FROM DUAL UNION ALL
SELECT 'lambo', 'price', '7' FROM DUAL UNION ALL
SELECT 'mercedes', 'price', '6' FROM DUAL;
문제는 내가 (독특한 차 이름과 세포에서 어떤 널 (null) 값으로 행) 그룹화 열 값과 같은 값으로 이름과 모든 것을 같은 항목을 얻을 수있는 테이블 "피벗"을 필요로한다는 것입니다. 따라서 나는 고전적인 회전 (DECODE) 리드 때문에 다른 결과로, "피벗"을 썼다 - 스큐 셀의 값과 널 (null) 값이 많이 감소. 는 것 그래서 이런 모습
car wheels color price
-------- ------ ------ -----
bmw 4 red 5
lambo 5 yellow 7
mercedes 4 black 6
질문 : 그럼
나는 절차를 통해이 작업을 수행하거나 더 우아한 해결책은 존재 하는가? 절차 (의사 코드) 다음과 같은 것이다 :
1. create table cars2 /*collumns are known in before, wheels/color/price*/
2. get the distinct names of the cars and insert them into collection /*eg nested table*/
3. for each car do
insert into table cars2
values per item /*looping items and inserting corresponding values*/
OK, 코드는 간단한 것 같다. 그러나 이상의 레코드의 50 만 15 항목을 가지고, 그리고 한 시간에 한 번씩 테이블을 업데이트하면 실제 성능 문제가 발생할 수 있습니다.
해결법
-
==============================
1.아래의 쿼리를 시도 -
아래의 쿼리를 시도 -
select * from (select cars, item,value from carTable) pivot(max(value) for item in ('wheels', 'color', 'price'))
-
==============================
2.
SELECT cars, MAX( CASE item WHEN 'color' THEN value END ) AS color, MAX( CASE item WHEN 'price' THEN value END ) AS price, MAX( CASE item WHEN 'wheels' THEN value END ) AS wheels FROM Cars GROUP BY cars;
출력 :
CARS PRICE COLOR WHEELS -------- ----- ------ ------ lambo 7 yellow 5 mercedes 6 black 4 bmw 5 red 4
from https://stackoverflow.com/questions/35791681/pivot-table-oracle-how-to-change-row-items-into-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 저장되지 않은 SQL 쿼리 스크립트를 복구 (0) | 2020.07.19 |
---|---|
[SQL] Laravel 웅변 테이블에 가입하고 관련 계산하기 (0) | 2020.07.19 |
[SQL] ">"로 ROWNUM 함수의 사용 오라클 로그인 [중복] (0) | 2020.07.19 |
[SQL] 왼쪽은 쿼리 첫 번째 테이블의 모든 행을 반환하지 JOIN (0) | 2020.07.19 |
[SQL] 오라클 10g SQL 피벗 (0) | 2020.07.19 |