4

私はこれが数回前に尋ねられたことを知っています、しかし私は私の例に合うどんな解決策も見つけることができません。

現在、特定のページを使用するためのユーザー権限の表があります。テーブルは次のようになります。

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

このデータからテーブルを生成するにはどうすればよいですか。すべてのページ名が列として表にされ、テーブルの各行はユーザーID用であり、列の値は、元のテーブルに次のエントリがあるかどうかに基づいて0または1を表示します。その特定のページ、例えば:

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

あなたの助けは大歓迎です!

4

2 に答える 2

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

ピボット:

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
于 2009-11-20T07:05:54.967 に答える
0

列をその名前の行に簡単に転置するには、XMLを使用する必要があります。私のブログでは、これを例で説明しました:リンク

于 2011-04-08T13:40:35.180 に答える