我已经从一些表中创建了一个视图,其中包含有关某些用户的授权信息的数据。一个例子:
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中完成此操作,请牢记将来可以添加更多角色,并且不必在每次创建角色时都更新我的代码?
提前致谢!
您应该使用 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)
但是您将无法将其用作视图。您必须创建一个过程
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |