首頁 > 資料庫 > mysql教程 > 如何在 MySQL 中動態地將行轉換為列?

如何在 MySQL 中動態地將行轉換為列?

Patricia Arquette
發布: 2025-01-14 10:00:45
原創
271 人瀏覽過

How to Dynamically Pivot Rows into Columns in MySQL?

MySQL動態行列轉換技巧

在MySQL中,動態地將行轉換為列,並同時動態新增列以適應新的行,可以使用多種技術實現。

使用GROUP BY和MAX函數

一種方法是利用GROUP BY和MAX函數。例如,考慮一個如下所示的行和列的表:

<code>表A

+--+-----+----+
| id | order | data |
+--+-----+----+
| 1  | 1    | P    |
| 2  | 2    | Q    |
| 2  | 1    | R    |
| 1  | 2    | S    |
+--+-----+----+</code>
登入後複製

要將這些行轉換為列,可以使用以下查詢:

<code>SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) data1,
        MAX(IF(`order` = 2, data, NULL)) data2
FROM    TableA
GROUP   BY ID</code>
登入後複製

此查詢依據ID欄位將資料列分組,並使用MAX和IF語句傳回每個order欄位的對應值。結果將是:

<code>+--+-----+-----+
| id | data1 | data2 |
+--+-----+-----+
| 1  | P    | S    |
| 2  | R    | Q    |
+--+-----+-----+</code>
登入後複製

使用動態SQL

如果order列有多個值,則可能更適合使用動態SQL。這允許動態產生查詢,並適應不同的order數量。

<code>SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;</code>
登入後複製

透過根據不同的order值動態產生查詢,這種方法提供了靈活性,並確保結果表會自動適應資料的任何變化。

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

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