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

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

Linda Hamilton
發布: 2024-12-10 07:46:09
原創
833 人瀏覽過

How to Unpivot Dynamic Columns into Rows in MySQL?

從動態列建立行

在資料管理領域,操作列和行通常是必要的。這個問題深入研究一個特定的任務:將多個動態列轉換為新表,其中的行包含特定條件。

給定的範例說明了 Table_1 的逆透視,從而產生 Expected_Result_Table。主要差異在於 Expected_Result_Table 在單獨的行中顯示每個非零值。

MySQL 缺乏直接的 UNPIVOT 函數,但可以使用 UNION ALL 語句克服此限制。基本方法包括為每個欄位建立單獨的 SELECT 語句,選擇 ID、列名稱作為「word」值,以及列值作為「qty」值。然後使用 UNION ALL 組合這些 SELECT 語句。

例如:

SELECT id, 'abc' AS word, abc AS qty
FROM yt
WHERE abc > 0
UNION ALL
SELECT id, 'brt', brt
FROM yt
WHERE brt > 0
登入後複製

在處理動態列時,這種方法會變得更加複雜。為了解決這個問題,可以使用準備好的語句。它們允許基於元資料動態產生 SQL 語句。

以下程式碼片段示範了這種方法:

SET @sql = NULL;

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'select id, ''',
      c.column_name,
      ''' as word, ',
      c.column_name,
      ' as qty 
      from yt 
      where ',
      c.column_name,
      ' > 0'
    ) SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns c
WHERE c.table_name = 'yt'
  AND c.column_name NOT IN ('id')
ORDER BY c.ordinal_position;

SET @sql 
  = CONCAT('select id, word, qty
           from
           (', @sql, ') x  order by id');


PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
登入後複製

在此範例中,動態 SQL 是使用來自information_schema.columns 表。然後使用準備好的語句 stmt 來執行動態產生的 SQL,有效地將動態列反轉為行。

透過實作這種方法,可以將動態列轉換為行,滿足特定的資料需求。

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

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