使用者定義欄位值的SQL 轉置技術
在SQL 中,您可能會遇到需要將儲存在行中的資料轉置為形成列。一個這樣的例子是,當您有一個如下所述的表時:
================================================ | Id | UserId | FieldName | FieldValue | =====+========+===============+================| | 1 | 100 | Username | John Doe | |----+--------+---------------+----------------| | 2 | 100 | Password | pass123! | |----+--------+---------------+----------------| | 3 | 102 | Username | Jane | |----+--------+---------------+----------------| | 4 | 102 | Password | $ecret | |----+--------+---------------+----------------| | 5 | 102 | Email Address | [email protected] | ------------------------------------------------
要將此數據轉換為一種格式,其中FieldNames 成為列標題,FieldValues 形成相應的行數據,您可以利用以下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 TABLE t GROUP BY t.userid
但是,為了讓此方法有效運作,您需要為每個預期的FieldName 值定義CASE 語句。為了增強靈活性,請考慮實作 MySQL 的準備語句(動態 SQL)語法來動態產生這些 CASE 語句。
以上是如何在 SQL 中轉置使用者定義的欄位值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!