Transpose some columns to rows using pivot with SQL

后端 未结 2 1132
孤独总比滥情好
孤独总比滥情好 2021-01-15 02:48

MS SQL Server 2012

I have a table called indexrows

name    displayname propertyvalue
abc      $row1        agg
abc      $row2                


        
相关标签:
2条回答
  • 2021-01-15 03:10

    PIVOTs need an aggregate function, because you could have multiple entries in the original table. If you know you only have one value per key, then just use MIN().

    Also, '$row1', '$row2', '$row3' are now columns and need to be delimited like columns

    select * 
    from (
      select 
      name,propertyvalue, displayname
      from indexrows
    ) a
    PIVOT 
    (
    MIN(propertyvalue)
    for [displayname] in ([$row1], [$row2], [$row3])
    ) as pivot
    
    0 讨论(0)
  • 2021-01-15 03:11

    There are a few things are wrong with your query.

    First, you are missing an aggregate function on your PIVOT. You need an aggregate around propertyvalue.

    Second, you need to surround the $row1, etc with square brackets not single quotes.

    Third, I would use a different alias for the as pivot

    As a result the code will be:

    select * 
    from 
    (
      select name, propertyvalue, displayname
      from indexrows
    ) a
    pivot
    (
      max(propertyvalue)
      for [displayname] in ([$row1], [$row2], [$row3])
    ) piv;
    

    See SQL Fiddle with Demo

    0 讨论(0)
提交回复
热议问题