繁体   English   中英

将查询结果连接到SQL Server中的单行时出现问题

[英]Problem when concat results of query to single row in SQL Server

我的表结构:

| ROLE_ID | PERMISSION_ID |
+---------+---------------+
|   1     |    12         |
|   2     |    12         |
|   2     |    13         |
|   2     |    14         |
|   1     |    13         |

我的查询返回错误

选择列表中的“ USER_ROLE_PERMISSION.PERMISSION_ID”列无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。

因为PERMISSION_ID不在聚合函数中:

DECLARE @CodeNameString NVARCHAR(MAX)
SET @CodeNameString = NULL

SELECT 
    @CodeNameString = COALESCE(@CodeNameString + ', ', '') + 
                      CAST(PERMISSION_ID AS VARCHAR) 
FROM
    USER_ROLE_PERMISSION 
GROUP BY    
    ROLE_ID

SELECT 
    @CodeNameString, ROLE_ID    
FROM
    USER_ROLE_PERMISSION
GROUP BY
    ROLE_ID

我想要得到这样的结果:

| ROLE_ID | PERMISSION_ID |
+---------+---------------+
|   1     |  12,13        |
|   2     |  12,13,14     |

我需要根据其ROLE_ID PERMISSION_ID 但是如您所见, PERMISSION_ID在聚合函数之外,因此我也需要按PERMISSION_ID对其进行分组。 如果我只想按ROLE_ID将其ROLE_ID

这不是获得所需内容的最佳方法。 而是使用XML方法进行串联:

select r.role_id,
       stuff( (select ',' + convert(varchar(max), permission_id)
               from user_role_permission urp
               where urp.role_id = r.role_id
               for xml path ('')
              ), 1, 1, ''
             ) as permissions
from (select distinct role_id from user_role_permission) r;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM