使用用户定义的字段名称转置 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
说明
使用预准备语句的动态查询
要处理动态字段名称列表,您可以利用 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中文网其他相关文章!