我有3个表用户表(用于存储用户信息)模块表(存储平台信息)权限表(其中存储用户id和模块id )
权限表存储有关特定模块的用户权限的信息。
现在,我想从这3个表中获取输出,它应该类似于“查询”。
用户表
用户ID \名称
1
2-商品-商品-特别商品
权限表
ID -用户ID - Mudule ID
1
2
3.=
模块表
模块ID \ Name
1.初级商品
2
3.自愿性、中转率-性
用于查询的输出
名称-另一许可-另一-允许-2-许可n
Mona公司生产的高级台式电脑
发布于 2015-07-06 14:06:31
您可以尝试以下方法:
SELECT pvt.*
FROM (
SELECT u.name as username, m.[Module Id], m.name as modulename
FROM users as u
INNER JOIN Permissions as p
ON u.[User Id] = p.[User Id]
INNER JOIN Modules as m
ON p.[Module Id] = m.[Module Id]
) as data
PIVOT (
MAX(data.modulename)
FOR m.[Module Id] IN([1],[2])
) as pvt您仍然需要将表名和列调整为实名。:-)
如果您需要一个动态解决方案,则可能需要运行以下命令:
DECLARE @sql nvarchar(max), @columns nvarchar(max)
SELECT @columns = COALESCE(@columns + N',['+CONVERT(nvarchar(max),[module Id])+']',
N'['+CONVERT(nvarchar(max),[module Id])+']')
FROM (
SELECT DISTINCT [module ID]
FROM Modules
) as cols
SET @sql = N'
SELECT pvt.*
FROM (
SELECT u.name as username, m.[Module Id], m.name as modulename
FROM users as u
INNER JOIN Permissions as p
ON u.[User Id] = p.[User Id]
INNER JOIN Modules as m
ON p.[Module Id] = m.[Module Id]
) as data
PIVOT (
MAX(data.modulename)
FOR m.[Module Id] IN('+@columns+')
) as pvt'
EXEC(@sql)https://stackoverflow.com/questions/31247741
复制相似问题