首頁 >資料庫 >mysql教程 >如何將 MySQL 中的動態列轉置為值大於 0 的行?

如何將 MySQL 中的動態列轉置為值大於 0 的行?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-11 20:31:11872瀏覽

How to Transpose Dynamic Columns to Rows in MySQL with Values Greater Than 0?

將動態列轉置為行:實現所需的轉換

簡介:
將資料庫從列逆透視為行是資料操作中常見的操作。本文探討如何轉置 Table_1 中的動態列,只考慮大於 0 的值,以獲得所需的 Expected_Result_Table。

MySQL 的 UNPIVOT 函數:
MySQL 本身不提供 UNPIVOT函數。但是,可以採用以下方法來達到預期的結果:

基於靜態列的方法:
對於有限數量的靜態列,可以使用一系列UNION用於建立轉置表的所​​有語句。每個語句都會選擇特定的欄位作為「Word」和「Qty」。此方法適用於具有已知列數的靜態模式。

基於動態列的方法:
對於具有未知列數的動態模式,更複雜的方法是必需的。您可以使用準備好的語句來產生對列進行透視的動態 SQL。這涉及到為每列動態建立 UNION ALL 語句。

動態列範例:
提供的MySQL 查詢示範如何使用動態方法轉置Table_1 中的欄位:

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;

結論:
透過使用靜態或動態方法,您可以有效地轉置MySQL中的動態列,僅考慮大於 0 的值,以獲得由 Expected_Result_Table 表示的所需的基於行的結構。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn