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 根据特定值填充结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server触发器根据上面的文件名和值填充Null值

根据值和键填充 SQL 中的行

Oracle Query 根据结果集中的值获取单个结果

sql - 根据另一列动态填充结果集中的列

SQL Query 显示带风的结果,但它跳过某些行

虽然循环 SQL 没有填充完整的结果