首頁 > 資料庫 > mysql教程 > 如何將 MySQL 列資料轉換為基於行的資料透視表?

如何將 MySQL 列資料轉換為基於行的資料透視表?

Linda Hamilton
發布: 2025-01-09 15:02:43
原創
187 人瀏覽過

How to Transform MySQL Column Data into a Row-Based Pivot Table?

將 MySQL 欄位資料轉換為行格式(透視表)

本文介紹如何將包含多列資料的 MySQL 表轉換為行和列格式的資料。產生的結構稱為透視表,它提供了一種簡潔而全面的資料視圖。

問題陳述:

我們有一個包含多列的表,每列代表一個資料類別,我們的目標是將其轉換為透視表格式,其中行代表類別(col1、col2、col3、col4),列代表月份(Jan 、Feb)。

解決方案架構:

要在 MySQL 中實現此轉換,我們必須遵循以下兩步驟流程:

反透視 (UNION ALL):

  1. 將輸入列 (col1、col2 等) 分割成單獨的行,為類別建立一個新欄位 (“descrip”),並為對應的值建立另一個欄位。使用 UNION ALL 運算子將這些行組合到單一表中。

透視 (聚合和 CASE):

  1. 對反透視表套用聚合函數,例如 MAX(),同時使用 CASE 語句來決定哪些值屬於哪個月份。這使我們能夠創建所需的列 (Jan、Feb)。

已實現的查詢:

反透視 (UNION ALL):

<code class="language-sql">SELECT
  id,
  month,
  col1 AS value,
  'col1' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col2 AS value,
  'col2' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col3 AS value,
  'col3' AS descrip
FROM
  yourtable
UNION ALL
SELECT
  id,
  month,
  col4 AS value,
  'col4' AS descrip
FROM
  yourtable;</code>
登入後複製

透視 (聚合和 CASE):

<code class="language-sql">SELECT
  descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS Jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS Feb
FROM
  (
    SELECT
      id,
      month,
      col1 AS value,
      'col1' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col2 AS value,
      'col2' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col3 AS value,
      'col3' AS descrip
    FROM
      yourtable
    UNION ALL
    SELECT
      id,
      month,
      col4 AS value,
      'col4' AS descrip
    FROM
      yourtable
  ) AS source
GROUP BY
  descrip;</code>
登入後複製

結果:

此查詢會將輸入表轉換為透視表格式:

DESCRIP Jan Feb
col1 A C
col2 B A
col3 0 G
col4 B E

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

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