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 JOIN
在 yourtable
的行和產生列名的子查詢的行之間建立笛卡爾積。 CASE
語句將每個列名對應到其對應的列值。
這兩種方法都能有效地解旋數據,為您提供所需的基於行的結構。
以上是如何在 MySQL 中將列逆透視為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!