使用 Case 语句转置 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] |
转置为转置形式:
UserId | Username | Password | Email Address |
---|---|---|---|
100 | John Doe | pass123! | |
102 | Jane | $ecret | [email protected] |
一种方法是使用多个 CASE 语句以及 group by 子句:
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
此查询计算每个用户和字段组合的最大值。 CASE 语句根据 FieldName 字段的值定义要返回哪个字段值。
但是,此方法需要为每个特定字段名称定义 CASE 语句。对于动态解决方案,请考虑使用 MySQL 的准备语句(动态 SQL)语法来生成查询。
以上是如何使用CASE语句转置SQL中的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!