2009-11-20 3 views
4

Я знаю, что это было задано несколько раз раньше, но я не могу найти решение, соответствующее моему примеру.SQL Преобразование строк в столбцы

В настоящее время у меня есть таблица разрешений пользователя для использования определенных страниц. Таблица будет выглядеть следующим образом:

UserID pagename   pageid 
----------------------------------- 
1   home    1 
1   contacts   3 
3   home    1 
2   links   2 

Как бы сгенерировать таблицу из этих данных, где у меня есть все имена страниц табличных в виде столбцов и каждая строка таблицы для идентификатора пользователя, столбец значений отображения- или 1 на основе, имела ли исходная таблица запись для этой конкретной страницы, например:

UserID  home  links contacts 
------------------------------------- 
1   1  0  1 
2   0  1  0 
3   1  0  0 

Ваша помощь очень ценится!

+0

Спасибо за форматирование топора, я пытался выяснить, как это сделать. – yogibear

+0

Сводка без агрегата: http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function –

+0

Не могли бы вы привести пример? эта страница не показывает, как это делается с помощью Pivot – yogibear

ответ

7

Построить ваш стол в @t:

declare @t as table (UserID int, pagename nvarchar(20), pageid int); 
insert into @t values (1,'home',1),(1,'contacts',3),(3,'home',1),(2,'links',2); 

Pivot его:

select UserID, 
    case when home is null then 0 else 1 end as home, 
    case when links is null then 0 else 1 end as links, 
    case when contacts is null then 0 else 1 end as contacts 
from @t 
pivot (
    max(pageid) for pagename in ([home],[links],[contacts]) 
) pivotT 

UserID  home  links  contacts 
----------- ----------- ----------- ----------- 
1   1   0   1 
2   0   1   0 
3   1   0   0 
0

Чтобы легко переставлять столбцы в строки со своими именами, которые вы должны использовать XML. В моем блоге я описал это с помощью примера: Link

+3

, что легко? Не нажимайте, может навредить вам! –