programing

mySQL 피벗/두 개의 열 ID를 기준으로 행 병합/열로 병합/이동

javamemo 2023. 10. 7. 09:07
반응형

mySQL 피벗/두 개의 열 ID를 기준으로 행 병합/열로 병합/이동

긴 것에서 넓은 것으로 데이터를 가져가려는 시나리오가 있습니다.(Windows에서 MariaDB 10.2 & HeidiSQL 9.4 사용)

기본적으로, 저는 모든 'id'가 한 줄이 되도록 노력하고 있습니다.

각 'id'는 하나 이상의 'sqn'(1로 시작하는 각 ID에 대해 항상 순차적인 숫자)을 가질 수 있습니다.나는 항상 최대 'sqn' 숫자를 알지는 못합니다.

각 id-sqn 조합에 대해 'tpn'과 같이 각 'id'에 대해 값이 일정한 열이 있습니다.

각 'id'에 대해 각 'sqn'에 고유한 값을 가지는 다른 것들이 있습니다 - 예를 들어 'sqft', 'amnt' 및 '날짜'.

첫 번째는 시작 테이블이고, 두 번째는 다음과 같은 목표를 달성하고자 하는 위치입니다.

╔═════╦═════╦═════╦══════╦══════╦═════════╗
║ id  ║ sqn ║ tpn ║ sqft ║ amnt ║   date  ║
╠═════╬═════╬═════╬══════╬══════╬═════════╣
║  1  ║  1  ║ 821 ║  110 ║  101 ║  1/1/00 ║
║  1  ║  2  ║ 821 ║  150 ║  195 ║    NULL ║
║  2  ║  1  ║ 551 ║ NULL ║   65 ║  6/1/15 ║
║  2  ║  2  ║ 551 ║  900 ║  190 ║  1/1/01 ║
║  2  ║  3  ║ 551 ║  220 ║  110 ║  1/1/05 ║
║  3  ║  1  ║ 821 ║  900 ║   44 ║  7/1/12 ║
╚═════╩═════╩═════╩══════╩══════╩═════════╝


╔═════╦═══════╦══════╦═══════╦════════╦═══════╦═══════╦═════════╦════════
║ id  ║ sqft1 ║ tpn  ║ amnt1 ║ date1  ║ sqft2 ║ amnt2 ║  date2  ║ sqft3... 
╠═════╬═══════╬══════╬═══════╬════════╬═══════╬═══════╬═════════╬════════
║  1  ║  110  ║ 821  ║  101  ║ 1/1/00 ║  150  ║  195  ║    NULL ║  NULL
║  2  ║ NULL  ║ 551  ║   65  ║ 6/1/15 ║  900  ║  190  ║  1/1/01 ║   220
║  3  ║  900  ║ 821  ║   44  ║ 7/1/12 ║ NULL  ║ NULL  ║    NULL ║  NULL
╚═════╩═══════╩══════╩═══════╩════════╩═══════╩═══════╩═════════╩═════════

물론, 각 테이블 인스턴스를 엿보고 최대 'sqn'을 찾은 다음 수동으로 이동하는 방식으로 수동으로 풀 수 있습니다.

하지만 저는 자주 업데이트되는 이러한 유형의 테이블을 수백 개, 수천 개 가지고 있습니다. (그리고 데이터 형태를 변경할 수 없습니다. 프론트엔드에서 설계할 수 있는 것이 아니라 소비만 할 수 있습니다.)피벗 테이블 제안의 변형을 시도했지만 'id'와 'sqn'을 모두 사용하면 막힙니다(예: http://sqlfiddle.com/ #!9/09408/2/4).

감사합니다!

언급URL : https://stackoverflow.com/questions/50557714/mysql-pivot-merge-move-rows-into-columns-based-on-two-column-ids

반응형