SQL Server 有一个选择查询作为一个选择列的一部分

Posted

技术标签:

【中文标题】SQL Server 有一个选择查询作为一个选择列的一部分【英文标题】:SQL Server Have a select query as part of one select columns 【发布时间】: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

【问题讨论】:

【参考方案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 功能是去掉最后的', ',将在末尾追加。

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

SQL same unit between two tables needs order numbers in 1 cell SQL and Coldfusion left join tables getting duplicate results as a list in one column SQL Query to get aggregated result in comma seperators along with group by column in SQL Server

【讨论】:

【参考方案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 希望将“第三列”显示为逗号分隔值字符串。加入将为每个公司提供多条线路,与员工数量一样多

以上是关于SQL Server 有一个选择查询作为一个选择列的一部分的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中两种选择所有列的区别? [复制]

从多个表中创建 Sql Server VIEW GROUPing BY,选择子查询作为别名

SQL Server里常用的语句 有那些?按功能分

SQL Server查询优化和事务处理

SQL Server PRINT SELECT(打印选择查询结果)?

SQL通过联结表从其他表中选择总和作为列