我正在尝试在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
答案 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