[SQL] 포스트 그레스 - 컬럼에 트랜스 행
SQL포스트 그레스 - 컬럼에 트랜스 행
나는 각 사용자에 대해 여러 개의 이메일 주소를 제공하는 다음과 같은 테이블을 가지고있다.
나는 사용자 쿼리에 열이 밖으로 평평해야합니다. 나에게 작성 날짜를 기준으로 "최신"3 개 이메일 주소를 제공합니다.
user.name | user.id | email1 | email2 | email3**
Mary | 123 | mary@gmail.com | mary@yahoo.co.uk | mary@test.com
Joe | 345 | joe@gmail.com | [NULL] | [NULL]
해결법
-
==============================
1.tablefunc 모듈 ()에서 크로스 탭을 사용하십시오.
tablefunc 모듈 ()에서 크로스 탭을 사용하십시오.
SELECT * FROM crosstab( $$SELECT user_id, user_name, rn, email_address FROM ( SELECT u.user_id, u.user_name, e.email_address , row_number() OVER (PARTITION BY u.user_id ORDER BY e.creation_date DESC NULLS LAST) AS rn FROM usr u LEFT JOIN email_tbl e USING (user_id) ) sub WHERE rn < 4 ORDER BY user_id $$ , 'VALUES (1),(2),(3)' ) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);
나는 특별한 의미가 없습니다 첫 번째 매개 변수에 대한 달러 인용 부호 사용. 당신이 일반적인 경우입니다 쿼리 문자열에 작은 따옴표를 탈출해야하는 경우 그냥 편리합니다 :
여기에 설명과 지침을 상세 :
특히, "여분의 열"에 대한 :
여기에 특별한 어려움은 다음과 같습니다 :
BY 순서로 NULLS LAST에주의하십시오.
-
==============================
2.발견이 질문에 당신이 열 정의되지 않은 번호가있는 곳을위한 동적 솔루션을 필요로 정확히 3에 트랜스가 아닌 것을 다른 사람이, 당신이 좋은 솔루션을 여기에서 찾아 낼 수있는 경우 : https://github.com/jumpstarter-io/ colpivot
발견이 질문에 당신이 열 정의되지 않은 번호가있는 곳을위한 동적 솔루션을 필요로 정확히 3에 트랜스가 아닌 것을 다른 사람이, 당신이 좋은 솔루션을 여기에서 찾아 낼 수있는 경우 : https://github.com/jumpstarter-io/ colpivot
from https://stackoverflow.com/questions/23060256/postgres-transpose-rows-to-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLite는 무작위 행 (들)을 선택 (0) | 2020.04.14 |
---|---|
[SQL] 여러 열에서 최소 값을 선택하는 가장 좋은 방법은 무엇입니까? (0) | 2020.04.14 |
[SQL] 오라클 SQL, CONCATENATE 여러 열 + 텍스트 추가 (0) | 2020.04.14 |
[SQL] 합계로 요약 행 추가 (0) | 2020.04.14 |
[SQL] DATETIME을 비교하고 DATE 시간 부분을 무시하고 (0) | 2020.04.14 |