[SQL] 오라클 10g SQL 피벗
SQL오라클 10g SQL 피벗
나는 예를 들어라는 테이블 테이블처럼 찾고 있습니다 :
ID | email
--------------
1 | a@a.com
1 | b@b.com
2 | c@c.com
3 | d@d.com
3 | e@e.com
내가 좋아하는 뭔가를 반환하고 싶습니다
ID | email1 | email2
--------------------
1 | a@a.com| b@b.com
2 | c@c.com|
3 | d@d.com| e@e.com
나는 나를이 중복 ID 행을 제거하는 데 도움과 그들의 다른 이메일에 대한 여분의 열을 추가 선회 사용할 수 있는지 궁금 해서요. 도와 주셔서 감사합니다.
SELECT id, email1, email2, email3
FROM (
SELECT id,
email,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY email) AS emailRank
FROM TABLE
)
pivot( max(email) FOR emailRank IN (1 as email1, 2 as email2, 3 as email3));
편집 : 감사 위의 고정 된 해변의 대답
해결법
-
==============================
1.나는 CASE 식 솔루션은 GROUP BY를 사용하여 선호합니다.
나는 CASE 식 솔루션은 GROUP BY를 사용하여 선호합니다.
SELECT id, MAX(CASE WHEN emailRank = 1 THEN email END) AS [1], MAX(CASE WHEN emailRank = 2 THEN email END) AS [2], MAX(CASE WHEN emailRank = 3 THEN email END) AS [3], MAX(CASE WHEN emailRank = 4 THEN email END) AS [4] FROM ( SELECT id, email, ROW_NUMBER() OVER (PARTITION BY id ORDER BY email) AS emailRank FROM TABLE ) GROUP BY id;
원래 피벗 예는 종류와 ")"누락했다. 피벗 작업을 얻기 위해 다음을 시도해보십시오
pivot( max(email) FOR emailRank IN (1,2,3));
-
==============================
2.당신은 프로 시저 또는 ROWNUM 및 디코딩하여 그룹의 조합을 사용할 수 있습니다. 개인적으로, 나는 프로 시저 접근 청소기를 찾을 수 있습니다.
당신은 프로 시저 또는 ROWNUM 및 디코딩하여 그룹의 조합을 사용할 수 있습니다. 개인적으로, 나는 프로 시저 접근 청소기를 찾을 수 있습니다.
참조 : http://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:15151874723724
from https://stackoverflow.com/questions/6963684/oracle10g-sql-pivot by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ">"로 ROWNUM 함수의 사용 오라클 로그인 [중복] (0) | 2020.07.19 |
---|---|
[SQL] 왼쪽은 쿼리 첫 번째 테이블의 모든 행을 반환하지 JOIN (0) | 2020.07.19 |
[SQL] 임의의 문자열 고유의 데이터베이스 테이블 (0) | 2020.07.19 |
[SQL] 어떻게 SQL 액세스 데이터베이스 테이블의 11 항목을 찾는 방법은? (0) | 2020.07.19 |
[SQL] 변환 한 날로부터 시대 - 오라클 (0) | 2020.07.19 |