gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:22:52 24 4
gpt4 key购买 nike

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

Role         Page         Right

Admin Home RW
Manager Home RW
Viewer Home R
Admin Overview RW
Manager Overview R
Viewer Overview R
Admin Settings RW

我的目标是创建一个像矩阵一样的新 View ,它显示以下内容:
Page         Admin     Manager   Viewer

Home RW RW R
Overview RW R R
Settings RW

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

提前致谢!

最佳答案

您应该使用 PIVOT 语句:

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

如果你有一个不断变化的角色列,你可以使用这样的代码:
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

但是,您将无法将其用作 View 。您将必须创建一个程序

关于sql-server - 如何从具有三个文本列的表创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57610045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com