在資料管理領域,操作列和行通常是必要的。這個問題深入研究一個特定的任務:將多個動態列轉換為新表,其中的行包含特定條件。
給定的範例說明了 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中文網其他相關文章!