用户定义字段值的 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中文网其他相关文章!