[SQL] 오라클 행의 여러 열에서 피벗을 사용하여
SQL오라클 행의 여러 열에서 피벗을 사용하여
나는 Oracle 테이블 (TAB1)에 다음 예제 데이터를하고 난 컬럼에 행을 변환하려합니다. 나는 하나 개의 컬럼에 오라클 피벗을 사용하는 방법을 알고있다. 그러나 여러 컬럼에 적용 할 수 있습니까?
샘플 데이터 :
Type weight height
A 50 10
A 60 12
B 40 8
C 30 15
내 의도 된 출력 :
A-count B-count C-count A-weight B-weight C-weight A-height B-height C-height
2 1 1 110 40 30 22 8 15
내가 할 수있는 것:
with T AS
(select type, weight from tab1 )
select * from T
PIVOT (
count(type)
for type in (A, B, C, D,E,F)
)
위의 쿼리는 나에게 아래의 결과를 제공
A B C
2 1 1
I 피벗 높이 또는 중량 합계 (중량) 또는 합 (높이)와 수 (*)를 대체 할 수있다. 내가 찾고 있어요,하지만 난 할 수없는 무엇, 하나 개의 쿼리에서 세 가지 (수, 무게와 높이)에 피벗입니다.
그것은 피벗을 사용하여 수행 할 수 있습니까?
해결법
-
==============================
1.설명서에서 볼 수 있듯이, 여러 집계 함수 절을 가질 수 있습니다. 이 작업을 수행 할 수 있습니다 :
설명서에서 볼 수 있듯이, 여러 집계 함수 절을 가질 수 있습니다. 이 작업을 수행 할 수 있습니다 :
select * from ( select * from tab1 ) pivot ( count(type) as ct, sum(weight) as wt, sum(height) as ht for type in ('A' as A, 'B' as B, 'C' as C) ); A_CT A_WT A_HT B_CT B_WT B_HT C_CT C_WT C_HT ---- ---- ---- ---- ---- ---- ---- ---- ---- 2 110 22 1 40 8 1 30 15
당신이 보여 순서대로 열을 원하는 경우 하위 쿼리의 다른 수준을 추가 :
select a_ct, b_ct, c_ct, a_wt, b_wt, c_wt, a_ht, b_ht, c_ht from ( select * from ( select * from tab1 ) pivot ( count(type) as ct, sum(weight) as wt, sum(height) as ht for type in ('A' as A, 'B' as B, 'C' as C) ) ); A_CT B_CT C_CT A_WT B_WT C_WT A_HT B_HT C_HT ---- ---- ---- ---- ---- ---- ---- ---- ---- 2 1 1 110 40 30 22 8 15
SQL 바이올린.
-
==============================
2.열 이름을하는 두 번째 방법은 더 나은하고 해결할 수있는 문제 더 많은 문제. 나는 열 이름은 단순히 2를 추가하고 세 번째에서 필요한 결과를 얻을 수 필요하므로 PIVOT에서 반환 된 데이터를 요약하고 싶었 요구했다 -
열 이름을하는 두 번째 방법은 더 나은하고 해결할 수있는 문제 더 많은 문제. 나는 열 이름은 단순히 2를 추가하고 세 번째에서 필요한 결과를 얻을 수 필요하므로 PIVOT에서 반환 된 데이터를 요약하고 싶었 요구했다 -
select a_ct, b_ct, c_ct, a_wt, b_wt, c_wt, a_ht, b_ht, c_ht, a_wt + b_wt + c_wt tot_wt from ( select * from ( select * from tab1 ) pivot ( count(type) as ct, sum(weight) as wt, sum(height) as ht for type in ('A' as A, 'B' as B, 'C' as C) ) ); A_CT B_CT C_CT A_WT B_WT C_WT A_HT B_HT C_HT TOT_WT ---- ---- ---- ---- ---- ---- ---- ---- ---- ------ 2 1 1 110 40 30 22 8 15 180
그냥 PIVOT 열 사용 반환 널 중 하나가,이 경우에 나는 그것을 해결하기 위해 사용되는 CASE 문이있는 경우 예상대로 작동하지 않습니다 (합계 등)이 집계 함수를 조심.
누군가가 도움이되기를 바랍니다.
-
==============================
3.알렉스 풀에서 대답은 굉장 내 오라클 쿼리 내를 도왔다. 이 날 궁금하게 여기 나는 빨리 마이크로 소프트 PIVOT을 여러 열에 대한 오라클 구문 비교를 지적 할 것이다. 이것은 내가 실제로 오라클을 수여 할 하나 개의 영역 인 SQL 간단한 구문 상 (그것이 나에 의해 만들어진 만들어 상이다).
알렉스 풀에서 대답은 굉장 내 오라클 쿼리 내를 도왔다. 이 날 궁금하게 여기 나는 빨리 마이크로 소프트 PIVOT을 여러 열에 대한 오라클 구문 비교를 지적 할 것이다. 이것은 내가 실제로 오라클을 수여 할 하나 개의 영역 인 SQL 간단한 구문 상 (그것이 나에 의해 만들어진 만들어 상이다).
피벗 여러 열을 필요로 할 때 마이크로 소프트 SQL은 간단하고 유연한 거의 없습니다.
동일한 데이터 집합을 감안할 때 :
DECLARE @tblSampleData AS table (Type nvarchar(10), Weight numeric(5,2), Height numeric(5,2)) INSERT INTO @tblSampleData (Type, Weight, Height) VALUES ('A', 50, 10) ,('A', 60, 12) ,('B', 40, 8 ) ,('C', 30, 15)
Mitsrosoft는 뿌린 :
select * from ( select * ,concat(Type,'1') as "Type1" ,concat(Type,'2') as "Type2" from @tblSampleData ) AS src pivot ( count(Type) --as ct, sum(weight) as wt, sum(height) as ht for Type in ([A], [B], [C]) ) AS pvt1 pivot ( sum(weight) --as ct, sum(weight) as wt, sum(height) as ht for Type1 in ([A1], [B1], [C1]) ) AS pvt1 pivot ( sum(height) --as ct, sum(weight) as wt, sum(height) as ht for Type2 in ([A2], [B2], [C2]) ) AS pvt1
from https://stackoverflow.com/questions/23939244/using-pivot-on-multiple-columns-of-an-oracle-row by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 테이블의 각 그룹에 대한 상위 N 개의 행을 선택한 (0) | 2020.05.10 |
---|---|
[SQL] 오라클에서 ROWNUM처럼 MySQL의에서 행 번호를 얻을 수있는 방법이 있나요 [중복] (0) | 2020.05.10 |
[SQL] 오라클 - 만드는 방법은 FAST의 REFRESH와보기를 구체화하고 JOINS (0) | 2020.05.10 |
[SQL] 어떻게 SqlAlchem y의에서 "왼쪽 외부 조인"를 실행합니다 (0) | 2020.05.10 |
[SQL] 나는 테이블의 열을 계산하려면 어떻게 (0) | 2020.05.10 |