반응형
행을 열로 피벗
다음을 생성하는 SQL 조회가 있습니다.
col1 | col2 | col3
=====================
item1 | key1 | value1
---------------------
item1 | key2 | value2
다음은 쿼리입니다.
SELECT t1.col1, t2.col2, t2.col3
FROM table1 t1
JOIN table2 t2 ON t1.id = t1.table1_id
표 1의 데이터:
id | col1
=========
1 | item1
2 | item1
표 2의 데이터:
table1_id | col2 | col3
=====================
1 | key1 | item1
1 | key2 | item2
2 | key1 | item1
2 | key2 | item2
2 | key3 | item3
행의 수는 다이나믹하기 때문에, 경우에 따라서는 다음과 같은 것도 취득할 수 있습니다.
col1 | col2 | col3
=====================
item2 | key1 | value1
---------------------
item2 | key2 | value2
---------------------
item2 | key3 | value3
첫 번째 쿼리는 다음과 같이 종료됩니다.
col1 | key1 | key2
=======================
item1 | value1 | value2
두 번째 질문은 다음과 같습니다.
col1 | key1 | key2 | key3
==============================
item2 | value1 | value2 | value3
너무 복잡해지지 않고 쉽게 할 수 있는 방법이 있을까요?MariaDB를 사용하고 있습니다.
이 질문을 원하는 것 같습니다.
SET SESSION group_concat_max_len = 1000000;
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN t2.col2= ''',
t2.col2,
''' THEN t2.col3 END) AS ',
t2.col2
)
)INTO @sql
FROM
t1
JOIN t2 ON t1.id = t2.table1_id
;
SET @sql=CONCAT('SELECT t1.col1, ',@sql,' FROM
t1
JOIN t2 ON t1.id = t2.table1_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
다른 아이템이 있는 경우 아이템별로 그룹화할 수 있습니다.
언급URL : https://stackoverflow.com/questions/27972461/pivot-rows-into-columns
반응형
'itsource' 카테고리의 다른 글
비동기 콜백함수에서 값을 반환하려면 어떻게 해야 합니까? (0) | 2023.01.15 |
---|---|
Persistent LocalDateTimeAsString이 DateTimeParseException이 되다 (0) | 2023.01.15 |
panda GroupBy.agg()를 사용하여 동일한 열의 여러 애그리게이션 (0) | 2023.01.15 |
WAMPServer의 Windows 명령줄에서 PHP를 실행하는 방법 (0) | 2023.01.15 |
Cent에서 MariaDB Galera 클러스터의 멀티 마스터 복제를 구성하는 방법OS 6 (0) | 2023.01.15 |