T-SQL将行连接成字符串

时间:2013-08-30 15:40:13

标签: sql-server tsql

我正在尝试在select语句中对字段值使用子查询,但我似乎无法弄清楚正确的语法。我想提取公司名称列表,并作为该查询的字段,我想选择该公司的所有员工。

关于我做错的任何想法?我得到的错误是

  

当未使用EXISTS

引入子查询时,只能在选择列表中指定一个表达式

T-SQL代码:

SELECT 
   company_name, 
   company_type, 
   (SELECT 
        employee_firstname, employee_lastname 
    FROM 
        tblemployees 
    WHERE 
        tblemployees.company_id = tblCompanies.company_id) as employees 
FROM 
    tblCompanies

期望的输出:

Company Name |  Company Type  | Employees
----------------------------------------------------------
Test Co      |  Construction  | Bob Smith, Jack Smith, etc

1 个答案:

答案 0 :(得分:9)

您需要使用FOR XML PATH或类似的解决方案来连接名字和姓氏。关于各种方法的更多细节here

SELECT DISTINCT
   c1.company_name, 
   c1.company_type,
   STUFF((SELECT
              ', ' + c2.employee_firstname + ' ' + c2.employee_lastname
          FROM
              tblCompanies c2
          WHERE
              c1.company_id = c2.company_id
          ORDER BY
              employee_lastname, employee_firstname
          FOR XML PATH(''), TYPE).value('.', 'varchar(max)'), 1, 1, '')
FROM tblCompanies c1

SQL Fiddle