2013-08-30 7 views
7

Próbuję użyć kwerendę podrzędną w instrukcji select dla wartości pola, ale nie mogę znaleźć poprawnej składni. Chcę pobrać listę nazw firm i jako pole dla tego zapytania, chcę wybrać wszystkich pracowników dla tej firmy.T-SQL łączyć wiersze na ciąg

Jakieś pomysły na temat tego, co robię źle? Błąd pojawia się

Tylko jeden wyraz może być określona na liście select, gdy podzapytanie nie jest wprowadzana z EXISTS

kod 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 

pożądany wynik:

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

możliwe duplikat [Łączy wiele wierszy w jeden ciąg tekstowy?] (Http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single- tekst-string) – Jeremy

Odpowiedz

9

Konieczne jest łączenie pierwszych i ostatnich nazw za pomocą FOR XML PATH lub podobne rozwiązanie. Więcej szczegółów na temat różnych metod 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

Dziękuję panu za te informacje. To działało idealnie, bardzo pomogło. Dzięki jeszcze raz. – Ralph