0

I have a such table:

| head | attribute | value |
| h1   | attr1     | val1  |
| h1   | attr2     | val2  |
| h1   | attr3     | val3  |
| h2   | attr1     | val1  |
| h2   | attr2     | val2  |
| h2   | attr3     | val3  |
| h3   | attr1     | val1  |
| h3   | attr2     | val2  |
| h3   | attr3     | val3  |

And i need to render it in this way:

| head | attr1 | attr2 | attr3 |
| h1   | val1  | val2  | val3  |
| h2   | val1  | val2  | val3  |
| h3   | val1  | val2  | val3  |

What is the best solution for that? I can order all records by head and parse from code to render. But is that possible to group it from SQL?

botero
  • 598
  • 2
  • 11
  • 23
dr11
  • 5,166
  • 11
  • 35
  • 77

1 Answers1

2
declare @t table (head nchar(2), attribute nchar(5),value nchar(4))

insert @t
values ('h1','attr1','val1')
,( 'h1','attr2','val2')
,( 'h1','attr3','val3')
,( 'h2','attr1','val1')
,( 'h2','attr2','val2')
,( 'h2','attr3','val3')
,( 'h3','attr1','val1')
,( 'h3','attr2','val2')
,( 'h3','attr3','val3')

select head,[attr1],[attr2],[attr3]
from @t
pivot (max(value) for attribute in ([attr1],[attr2],[attr3])) p
JohnLBevan
  • 22,735
  • 13
  • 96
  • 178