如何编写SQL查询将多行键值数据转为单行结构化展示?
SQL行转列查询方案
原表结构(假设表名为user_attributes)
ID Key Value 1 OrgName Google 1 email John.Smith@gmail.com 1 Status active 1 givenName John 1 sn Smith 1 userName JSmith 2 OrgName Yahoo 2 email Paul.Jonesh@yahoo.com 2 Status active 2 givenName Paul 2 sn Jones 2 userName PJones
目标输出格式
ID givenName sn 1 John Smith 2 Paul Jones
实现方案
通用写法(支持绝大多数关系型数据库)
通过条件聚合筛选指定Key的取值,按ID分组提取对应字段:
SELECT ID, MAX(CASE WHEN `Key` = 'givenName' THEN Value END) AS givenName, MAX(CASE WHEN `Key` = 'sn' THEN Value END) AS sn FROM user_attributes GROUP BY ID;
注:用MAX或MIN均可,因为每个ID对应目标Key仅存一条记录,聚合函数仅用于提取唯一值。
特定数据库PIVOT写法(以SQL Server为例)
若数据库支持PIVOT语法,可使用更简洁的写法:
SELECT ID, givenName, sn FROM ( SELECT ID, `Key`, Value FROM user_attributes ) AS src PIVOT ( MAX(Value) FOR `Key` IN (givenName, sn) ) AS pvt;
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

