【问题标题】:T-SQL : select table with columnames derived from fieldName column (PIVOT, CASE)T-SQL:选择列名从字段名称列(PIVOT,CASE)派生的表
【发布时间】:2020-04-10 17:11:56
【问题描述】:

我正在努力在 T-SQL 中编写 select 语句,该语句生成一个表,其中列名表示源表列 (FieldName) 的值以及列中值的记录 (@987654323 @) 并按外键 (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|

结果表

|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 |

我尝试使用 pivot 和 case 语句,但结果远非令人满意。

非常感谢任何指导

附言。名字是随机生成的,所以任何对真实人物的引用都是巧合。

【问题讨论】:

    标签: sql sql-server tsql pivot entity-attribute-value


    【解决方案1】:

    我建议使用条件聚合来旋转这个实体-属性-值表:

    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
    

    【讨论】:

      【解决方案2】:

      如果您想尝试 PIVOT

      Select *
       From  YourTable src
       Pivot (max(FieldValue) for FieldName in ([FirstName],[LastName],[Email])) pv
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 2023-03-16
        • 2014-09-21
        • 1970-01-01
        • 2020-02-06
        • 1970-01-01
        相关资源
        最近更新 更多