首頁 > 資料庫 > mysql教程 > 如何使用動態產生的使用者定義列名轉置 SQL 表資料?

如何使用動態產生的使用者定義列名轉置 SQL 表資料?

DDD
發布: 2025-01-05 21:40:41
原創
627 人瀏覽過

How Can I Transpose SQL Table Data with Dynamically Generated User-Defined Column Names?

使用使用者定義的欄位名稱轉置SQL 表資料

透視資料或轉置資料涉及轉換表,其中欄位代表屬性和行代表表中的實體數據,其中行代表屬性,列代表實體數據。在使用使用者定義的欄位名稱時,這通常很有用,如提供的範例表中所示。

轉置表的查詢

要轉置給定的表,您可以使用SQL函數和條件語句的組合,如圖下面:

SELECT t.UserId,
       MAX(CASE WHEN t.FieldName = 'Username' THEN t.FieldValue ELSE NULL END) AS Username,
       MAX(CASE WHEN t.FieldName = 'Password' THEN t.FieldValue ELSE NULL END) AS Password,
       MAX(CASE WHEN t.FieldName = 'Email Address' THEN t.FieldValue ELSE NULL END) AS Email
FROM t
GROUP BY t.UserId
登入後複製

說明

  • MAX函數傳回每列的最大值,該最大值對應於特定欄位名稱的欄位值。
  • CASE 語句計算FieldName 列,並為WHERE 中出現的每個欄位名稱傳回對應的FieldValue
  • GROUP BY 子句按UserId 將結果分組,確保每個使用者的資料放置在單獨的行中。

使用預先準備語句的動態查詢

要處理動態欄位名稱列表,您可以利用MySQL 的準備語句(動態SQL)語法:

SET @sql = 'SELECT UserId, ';
SELECT GROUP_CONCAT(CONCAT('MAX(CASE WHEN FieldName = ''', FieldName, ''' THEN FieldValue ELSE NULL END) AS ', FieldName)) INTO @sql FROM (SELECT DISTINCT FieldName FROM t);
SET @sql = CONCAT(@sql, ' FROM t GROUP BY UserId');
PREPARE stmt FROM @sql;
EXECUTE stmt;
登入後複製

此查詢根據表中不同的欄位名稱動態建立SQL 語句,並使用準備好的語句執行它。

以上是如何使用動態產生的使用者定義列名轉置 SQL 表資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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