sql - 要连接的 Sum 的等效字符串

标签 sql sql-server sql-server-2008 tsql

我想要一个查询在 1 行输出左表中的 Id 和连接表中的描述。

架构:

person
---------    
id (int)

role
-------------
id (int)
description (varchar(100))

personrole
-------------
personid (int)
roleid (int)

示例数据:
person
------------
id
1
2

role
------------
id   description
1    user
2    admininstrator
3    tester

personrole
-------------
personid   roleid
1          1
2          1
2          2
2          3

所以,我希望输出是:
PersonId   Roles
1          user
2          user;administrator;tester

最佳答案

SELECT
     p.ID PersonID,
     STUFF(
         (SELECT ';' + b.description
          FROM  personrole a 
                INNER JOIN role b
                  ON a.roleid = b.id
          WHERE a.personid = p.id
          FOR XML PATH (''))
          , 1, 1, '')  AS DescriptionList
FROM person AS p
GROUP BY p.ID
  • SQLFiddle Demo

  • 输出
    ╔══════════╦════════════════════════════╗
    ║ PERSONID ║      DESCRIPTIONLIST       ║
    ╠══════════╬════════════════════════════╣
    ║        1 ║ user                       ║
    ║        2 ║ user;admininstrator;tester ║
    ╚══════════╩════════════════════════════╝
    

    关于sql - 要连接的 Sum 的等效字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633373/

    相关文章:

    sql - 将具有多个分隔符的字符串拆分为 3 部分

    sql - 索引字符串列以进行完整字符串比较的最佳方法

    mysql - 从按条件分组的所有记录中获取 AVG,然后获取这些平均值的 AVG

    php - 如果存在具有 2 列值的记录,则忽略插入

    sql-server - 从 SSIS 连接到 Azure 服务总线

    sql - 在 SSIS 中将字符串转换为 DateTime

    SQL Server 2008 R2 将 CONVERT_IMPLICIT tinyint 转换为位

    php - MySql如何通过过滤多列来限制多个数字?

    mysql - 使用 MySQL 查询查找具有匹配行的 ID

    mysql - 如何更改对 phpmyadmin SQL/SQL 服务器的语法 SQL 访问