首頁 > 資料庫 > mysql教程 > 如何在 MySQL 中將列逆透視為行?

如何在 MySQL 中將列逆透視為行?

Linda Hamilton
發布: 2025-01-20 05:41:08
原創
1002 人瀏覽過

How to Unpivot Columns into Rows in MySQL?

MySQL 中將列轉換為行的技巧

在 MySQL 中處理以列形式組織的資料時,您可能需要將其轉換為以行為單位呈現資料的格式。這個過程稱為解旋(Unpivoting)。

問題:

考慮以下表格:

<code>ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2</code>
登入後複製

目標是將列轉換為行,得到如下結構的表:

<code>ID | 值 | 列名
1  | a1 | a
1  | b1 | b
1  | c1 | c
2  | a2 | a
2  | b2 | b
2  | c2 | c</code>
登入後複製

解:

與其他一些資​​料庫不同,MySQL 沒有內建的解旋函數。要獲得所需的結果,您可以使用 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、列名和對應的值。

使用 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>
登入後複製

在這種情況下,CROSS JOINyourtable 的行和產生列名的子查詢的行之間建立笛卡爾積。 CASE 語句將每個列名對應到其對應的列值。

這兩種方法都能有效地解旋數據,為您提供所需的基於行的結構。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板