2013-08-30 105 views
7

我试图在选择语句上对字段值使用子查询,但我似乎无法弄清楚正确的语法。我想提取一个公司名称列表并作为该查询的字段,我想选择该公司的所有员工。T-SQL将行连接到字符串

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

只有一个表达式可以在选择列表中指定当子查询未与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 
+3

的[串连许多行成一个单一的文本字符串?(可能重复http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-文本字符串) – Jeremy

回答

9

您需要使用0123连接姓和名或类似的解决方案。关于各种方法的更多细节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

+0

谢谢您的信息。这非常有效,非常有帮助。再次感谢。 – Ralph