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

如何在 MySQL 中透視表:將行轉換為列?

Patricia Arquette
發布: 2025-01-25 11:26:10
原創
607 人瀏覽過

How to Pivot a Table in MySQL: Transforming Rows into Columns?

將表重塑為將行轉換為列

問題:

將一個包含三列的表轉換為一個數據透視表,其中行變為列。

示例:

輸入表:

hostid itemname itemvalue
1 A 10
1 B 3
2 A 9
2 C 40

所需輸出(數據透視表):

hostid A B C
1 10 3 0
2 9 0 40

解決方案:

MySQL 的數據透視功能涉及一個三步過程:

  1. 選擇感興趣的列:
<code class="language-sql">SELECT hostid, itemname, itemvalue
FROM history;</code>
登入後複製
  1. 使用額外列擴展基本表:

添加與每個唯一 itemname 對應的列。

<code class="language-sql">CREATE VIEW history_extended AS (
  SELECT
    history.*,
    CASE WHEN itemname = "A" THEN itemvalue END AS A,
    CASE WHEN itemname = "B" THEN itemvalue END AS B,
    CASE WHEN itemname = "C" THEN itemvalue END AS C
  FROM history
);</code>
登入後複製
  1. 分組和聚合擴展表:

按 hostid 分組,並對每一列的值求和。

<code class="language-sql">CREATE VIEW history_itemvalue_pivot AS (
  SELECT
    hostid,
    SUM(A) AS A,
    SUM(B) AS B,
    SUM(C) AS C
  FROM history_extended
  GROUP BY hostid
);</code>
登入後複製
  1. 可選:美化聚合表(將 NULL 值替換為 0)
<code class="language-sql">CREATE VIEW history_itemvalue_pivot_pretty AS (
  SELECT
    hostid,
    COALESCE(A, 0) AS A,
    COALESCE(B, 0) AS B,
    COALESCE(C, 0) AS C
  FROM history_itemvalue_pivot
);</code>
登入後複製

注意事項和限制:

  • 此解決方案假設數據透視列具有特定值(此處為 itemvalue)。
  • 它支持多個 y 值 (hostid),但僅限於手動添加數據透視列。
  • 使用大量列生成數據透視表可能具有挑戰性。

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

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