首頁 >資料庫 >mysql教程 >如何將 MySQL 行轉換為基於多列的欄位?

如何將 MySQL 行轉換為基於多列的欄位?

Barbara Streisand
Barbara Streisand原創
2025-01-03 07:27:40223瀏覽

How to Convert MySQL Rows to Columns Based on Multiple Columns?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn