如何从具有三个文本列的表中创建矩阵

Bry*_*yan 5 sql-server pivot

我已经从一些表中创建了一个视图,其中包含有关某些用户的授权信息的数据。一个例子:

Role         Page         Right

Admin        Home         RW
Manager      Home         RW
Viewer       Home         R
Admin        Overview     RW
Manager      Overview     R
Viewer       Overview     R
Admin        Settings     RW        
Run Code Online (Sandbox Code Playgroud)

我的目标是创建一个像矩阵这样的新视图,该视图显示以下内容:

Page         Admin     Manager   Viewer

Home          RW         RW        R
Overview      RW         R         R
Settings      RW 
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在SSMS中完成此操作,请牢记将来可以添加更多角色,并且不必在每次创建角色时都更新我的代码?

提前致谢!

ily*_*rov 4

您应该使用 PIVOT 语句:

SELECT * 
FROM table1 AS t
PIVOT (MAX([RIGHT]) FOR [ROLE] IN ([Admin], [Manager], [Viewer])) AS pvt 
Run Code Online (Sandbox Code Playgroud)

如果您的角色列发生变化,您可以使用如下代码:

DECLARE @ColumnNames NVARCHAR(MAX)  
SELECT @ColumnNames = STUFF(
           (
               SELECT DISTINCT ',['  + [ROLE]+ ']'
               FROM  trtr
               ORDER BY 1 
                      FOR XML PATH('')
           ), 1, 1, '') 

DECLARE @Query AS NVARCHAR(MAX)
SET @Query = 'SELECT * 
FROM trtr AS t
PIVOT (MAX([RIGHT]) FOR [ROLE] IN (' + @ColumnNames + ')) AS pvt'          
EXEC sp_executesql @Query
Run Code Online (Sandbox Code Playgroud)

但是您将无法将其用作视图。您必须创建一个过程

  • 这个解决方案可行,但每次添加新角色时都需要修改脚本,不确定这对于OP是否可行 (2认同)