首頁 >資料庫 >mysql教程 >如何使用 UNION ALL 或 CROSS JOIN 將 MySQL 列逆透視為行?

如何使用 UNION ALL 或 CROSS JOIN 將 MySQL 列逆透視為行?

Linda Hamilton
Linda Hamilton原創
2025-01-20 05:56:09600瀏覽

How to Unpivot MySQL Columns into Rows Using UNION ALL or CROSS JOIN?

將 MySQL 欄位重組為行

資料轉換是資料庫管理中的常見任務。 在 MySQL 中,為了改進資料分析或表示,通常需要將列資料轉換為行(這個過程稱為逆透視)。雖然 MySQL 缺乏專用的 unpivot 函數,但可以使用 UNION ALL 查詢或 CROSS JOIN.

有效地實現此轉換。

UNION ALL方法

一個有效的策略採用 UNION ALL 運算子:

<code class="language-sql">SELECT id, 'a' AS col, a AS value
FROM yourtable
UNION ALL
SELECT id, 'b' AS col, b AS value
FROM yourtable
UNION ALL
SELECT id, 'c' AS col, c AS value
FROM yourtable;</code>

此查詢檢索 id 欄位以及欄位名稱 (col) 及其對應的值 (value)。 結果是一個重構的資料集,其中每一行代表一個列值對。

CROSS JOIN方法

或者,可以使用CROSS JOIN

<code class="language-sql">SELECT t.id,
       c.col,
       CASE c.col
           WHEN 'a' THEN a
           WHEN 'b' THEN b
           WHEN 'c' THEN c
       END AS data
FROM yourtable t
CROSS JOIN
(
  SELECT 'a' AS col
  UNION ALL SELECT 'b'
  UNION ALL SELECT 'c'
) c;</code>

此處,yourtable(別名 t)與產生列名稱清單 (col) 的子查詢連接。 CASE 語句根據列名動態選擇適當的值。 結果與 UNION ALL 方法非常相似,是一個扁平資料集,其中每行包含 id、列名稱及其關聯值。

UNION ALLCROSS JOIN 技術都為 MySQL 中的列逆透視提供了強大的解決方案,從而能夠將列式資料轉換為行以進行後續處理或視覺化。

以上是如何使用 UNION ALL 或 CROSS JOIN 將 MySQL 列逆透視為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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