2015-03-02 2 views
0

у меня есть такая таблица:SQL-запрос для вывода таблицы в сетке

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

И мне нужно, чтобы сделать это таким образом:

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

Что является лучшим решением для этого? Я могу упорядочить все записи голосом и разобрать код для рендеринга. Но возможно ли сгруппировать его из SQL?

+0

То, что вы ищете, является сводной таблицей. Здесь есть много вопросов. Посмотри на это. –

+0

См. Ответ на этот вопрос: http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function – Kevin

+0

Ответ: НЕ хранить данные, такие как пары атрибут/значение. Это вызовет проблемы. – jarlh

ответ

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 
Смежные вопросы