SQL Query 根据特定值填充结果
Posted
技术标签:
【中文标题】SQL Query 根据特定值填充结果【英文标题】:SQL Query populate results based on specific values 【发布时间】:2015-05-13 15:01:58 【问题描述】:我正在尝试提取报告以突出显示我的系统中有哪些用户及其访问级别以及组成员身份。
用户位于名为 users /
的表中组位于名为组的表中/组使用用户的员工代码链接到用户
角色位于名为 roles 的表中/角色使用用户的 pkey 链接到用户
一个用户可以是多个组的成员并具有多个角色,我的目标是让一个 SQL 查询在一个表中返回它,其中我的列将是我的组和角色,而行将是用户。理想情况下,当用户是组的成员或分配了角色时,我想用 X 填充列
到目前为止,我已经使用 UNION 和几个关节处理语句,但是当用户是组的一部分或分配了角色时,我无法将其放入表中并用 x 填充。
非常感谢任何帮助!
【问题讨论】:
您使用的是哪个 DBMS?后格雷斯?甲骨文?还请将表定义添加为create table
语句,包括一些示例数据和基于该数据的预期输出(理想情况下创建一点sqlfiddle.com)
在应用程序/报告层中动态定义列比在 SQL 中容易得多。一些 SQL 系统具有“枢轴”功能,但它们通常不是动态的(您必须指定列),除非您使用动态 SQL。
【参考方案1】:
对于你提供的信息,我想你想做的是下一个:
select u.idUser, u.username,
STUFF((SELECT distinct ',' + convert(varchar,g.groupname)
from groups g
where g.IdUser = u.iduser
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'') as rutas,
STUFF((SELECT distinct ',' + convert(varchar,r.rolename)
from Roles r
where r.IdUser = u.iduser
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'') as rutas,
from users u
where u.idUser = 4882
仅使用表格行的名称修改查询,或编辑您的问题并提供此数据以提供准确答案。
【讨论】:
以上是关于SQL Query 根据特定值填充结果的主要内容,如果未能解决你的问题,请参考以下文章