MySQL 查詢基於多列將行轉換為列
簡介:
簡介:動態將🎜>簡介:
動態將🎜>簡介:動態將🎜>簡介:
動態將🎜>簡介:動態將🎜>簡介:
動態將🎜>簡介:SELECT id, CONCAT('order', `order`) col, data value FROM tableA UNION ALL SELECT id, CONCAT('item', item) col, price value FROM tableA;
動態將🎜>介紹行轉換為列是資料操作中的常見任務。在本文中,我們探索使用 MySQL 查詢的解決方案,擴展了處理單列轉換的先前解決方案的功能。
問題:
SELECT id, MAX(CASE WHEN col = 'order1' THEN value END) ORDER1, MAX(CASE WHEN col = 'order2' THEN value END) ORDER2, MAX(CASE WHEN col = 'order3' THEN value END) ORDER3, MAX(CASE WHEN col = 'item1' THEN value END) ITEM1, MAX(CASE WHEN col = 'item2' THEN value END) ITEM2, MAX(CASE WHEN col = 'item3' THEN value END) ITEM3 FROM ( SELECT id, CONCAT('order', `order`) col, data value FROM tableA UNION ALL SELECT id, CONCAT('item', item) col, price value FROM tableA ) d GROUP BY id;
您有一個具有多行表示資料和相應價格的表,按訂單和項目組織。目標是將這些數據轉換為一個表,其中每個訂單表示為一列,每個商品表示為一行,並顯示相應的價格。
解:SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT( 'MAX(CASE WHEN col = ''', col, ''' THEN value END) AS `', col, '`') ) INTO @sql FROM ( SELECT CONCAT('order', `order`) col FROM tableA UNION ALL SELECT CONCAT('item', `item`) col FROM tableA )d; SET @sql = CONCAT('SELECT id, ', @sql, ' FROM ( SELECT id, CONCAT(''order'', `order`) col, data value FROM tableA UNION ALL SELECT id, CONCAT(''item'', item) col, price value FROM tableA ) d GROUP BY id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;為了實現這種多列轉換,我們採用了兩步驟製程。
第 1 步:取消透視數據
我們首先使用 UNION ALL 反轉數據,為每個訂單和商品組合創建多行。這使我們能夠在下一步中更輕鬆地操作資料。 第2 步:對未透視的資料進行透視一旦對資料進行了透視,我們就進行透視使用帶有CASE 語句的聚合函數將其返回到列中。這將按 ID 對未透視的行進行分組,並將相應的值分配給適當的列。 動態查詢產生:處理不同訂單數量的表格和項目,我們可以使用準備好的動態產生查詢結果:結果表提供了數據的簡明表示,每個訂單作為一列,每個項目作為一行,顯示相應的價格。以上是如何將 MySQL 行轉換為基於多列的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!