【问题标题】:SQL Server Have a select query as part of one select columnsSQL Server 有一个选择查询作为一个选择列的一部分
【发布时间】:2011-08-29 15:46:55
【问题描述】:

嘿,我只是想知道以下是否可能

select id, name, (select name from secondTable where companyId = tableOne.id) as concatenatedString..
from tableOne

所以我正在寻找的选择是针对 tableOne 中的每条记录返回,在另一个表中执行查找并返回此记录 id 的所有值。 (另一个表是查找表,因此每个 id 可能有 1 个或多个条目)。如果在子查询中返回超过 1 个值以构建单个字符串值,以逗号分隔。

所以即返回数据看起来像

1  Microsoft Bill,Gate,Jack
2  Apple     Jobs

【问题讨论】:

    标签: sql sql-server sql-server-group-concat


    【解决方案1】:

    你想使用FOR XML PATH 构造:

    select 
        ID, 
        Name,
        stuff((select ', ' + Name
               from secondTable where companyId = tableOne.id 
               for xml path('')),
              1,2,'') [Names]
    from tableOne
    

    STUFF 功能是去掉最后的', ',将在末尾追加。

    您还可以在此处查看其他示例:

    【讨论】:

      【解决方案2】:

      我不确定您为什么要跳过连接,因为它会使您的查询更加灵活。如果您热衷于使用子选择,您可以通过使您的子选择成为一个表格来做到这一点:

      SELECT t1.id, t1.name, t2.name
      FROM   tableOne t1
      INNER JOIN (select id, name from secondTable) AS t2
      on t1.id = t2.id
      

      当然,如果您所做的只是加入 ID,那么 Abe 的回答会更有意义。

      如果您想在 select 上聚合以防它返回多个列,您可以使用 GROUP BY t1.id, t1.name。

      【讨论】:

      • OP 希望将“第三列”显示为逗号分隔值字符串。加入将为每个公司提供多条线路,与员工数量一样多
      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2019-09-14
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多