T-SQL : select table 列名派生自字段名称列 (PIVOT, CASE)
T-SQL : select table with columnames derived from fieldName column (PIVOT, CASE)
我正在努力在 T-SQL 中编写一个 select
语句,该语句生成一个 table 列名代表源 table 列的值(FieldName
) 和值在列 (FieldValue
) 中并按外键 (RegistrationId
) 分组的记录。
我发现了很多有类似问题的例子,我很惊讶我找不到正确的解决方案,因为在我看来这是一种很常见的情况。
|RegistrationID |FieldName|FieldValue |
+------------------+---------+-----------------------+
|Guid1 |firstname|john |
|Guid1 |lastname |johnson |
|Guid1 |email |john.johnson@mail.com |
|Guid2 |firstname|mary |
|Guid2 |lastname |williams |
|Guid2 |email |mary.williams@mail.com |
|Guid3 |firstname|james |
|Guid3 |lastname |miller |
|Guid3 |email |james.miller@mail.com |
|Guid4 |firstname|patricia |
|Guid4 |lastname |jones |
|Guid4 |email |patricia.jones@mail.com|
结果table
|RegistrationID |firstname|lastname |email |
+------------------+---------+------------------+------------------------+
|Guid1 |john |johnson |john.johnson@mail.com |
|Guid2 |mary |williams |mary.williams@mail.com |
|Guid3 |james |miller |james.miller@mail.com |
|Guid4 |patricia |jones |patricia.jones@mail.com |
我尝试使用数据透视表和案例语句,但结果远非令人满意。
非常感谢任何指导
PS。名字是随机生成的,所以任何对真人的引用纯属巧合。
我建议使用条件聚合来转换这个实体属性值 table:
select
registrationID,
max(case when fieldName = 'firstname' then fieldValue end) firstname,
max(case when fieldName = 'lastname' then fieldValue end) lastname,
max(case when fieldName = 'email' then fieldValue end) email
from mytable
group by registrationID
如果您想尝试 PIVOT
Select *
From YourTable src
Pivot (max(FieldValue) for FieldName in ([FirstName],[LastName],[Email])) pv
我正在努力在 T-SQL 中编写一个 select
语句,该语句生成一个 table 列名代表源 table 列的值(FieldName
) 和值在列 (FieldValue
) 中并按外键 (RegistrationId
) 分组的记录。
我发现了很多有类似问题的例子,我很惊讶我找不到正确的解决方案,因为在我看来这是一种很常见的情况。
|RegistrationID |FieldName|FieldValue |
+------------------+---------+-----------------------+
|Guid1 |firstname|john |
|Guid1 |lastname |johnson |
|Guid1 |email |john.johnson@mail.com |
|Guid2 |firstname|mary |
|Guid2 |lastname |williams |
|Guid2 |email |mary.williams@mail.com |
|Guid3 |firstname|james |
|Guid3 |lastname |miller |
|Guid3 |email |james.miller@mail.com |
|Guid4 |firstname|patricia |
|Guid4 |lastname |jones |
|Guid4 |email |patricia.jones@mail.com|
结果table
|RegistrationID |firstname|lastname |email |
+------------------+---------+------------------+------------------------+
|Guid1 |john |johnson |john.johnson@mail.com |
|Guid2 |mary |williams |mary.williams@mail.com |
|Guid3 |james |miller |james.miller@mail.com |
|Guid4 |patricia |jones |patricia.jones@mail.com |
我尝试使用数据透视表和案例语句,但结果远非令人满意。
非常感谢任何指导
PS。名字是随机生成的,所以任何对真人的引用纯属巧合。
我建议使用条件聚合来转换这个实体属性值 table:
select
registrationID,
max(case when fieldName = 'firstname' then fieldValue end) firstname,
max(case when fieldName = 'lastname' then fieldValue end) lastname,
max(case when fieldName = 'email' then fieldValue end) email
from mytable
group by registrationID
如果您想尝试 PIVOT
Select *
From YourTable src
Pivot (max(FieldValue) for FieldName in ([FirstName],[LastName],[Email])) pv