Сводная таблица без агрегата с одним столбцом в SQL Server

У меня есть стол с ID, EmployeeNameHistory, CompanyWorked столбцы

CREATE TABLE EMp
(
     ID int not null,
     EmployeeNameHistory varchar(200) not null, 
     CompanyWorked varchar(200) not null
)

INSERT INTO EMP (1, 'Jill Joane', 'Oracle corp')
INSERT INTO EMP (1, 'Jill Keane', 'Oracle corp')
INSERT INTO EMP (1, 'Jill Keane', 'Infosys')
INSERT INTO EMP (2, 'Anne Smith', 'Oracle corp')
INSERT INTO EMP (2, 'Anne Jordan', 'Infosys')

Я хочу, чтобы вывод был только по ID

1 (Jill Joane Oracle corp) (Jill Keane Oracle corp) (Jill Keane Infosys)
2 (Anne Smith Oracle corp) (Anne Jordan Infosys)

Первый столбец ID Второй по n столбцов '(' + EmployeeNameHistory + CompanyWorked + ')'

Как я могу это сделать?

Спасибо MR

3 ответа

Решение

Еще один вариант, который работает от отдельного списка идентификаторов

Select A.ID
      ,History = (Select Stuff((Select ' (' +EmployeeNameHistory +' ' + CompanyWorked +')' From Emp Where ID=A.ID For XML Path ('')),1,1,'') )
 From (Select Distinct ID From Emp ) A

Возвращает

ID  History
1   (Jill Joane Oracle corp) (Jill Keane Oracle corp) (Jill Keane Infosys)
2   (Anne Smith Oracle corp) (Anne Jordan Infosys)

запрос

SELECT e.ID 
     , STUFF(( SELECT ' (' + t.EmployeeNameHistory + ' ' + t.CompanyWorked + ')'
              FROM EMP t
              WHERE t.ID = e.ID
              FOR XML PATH(''), TYPE)
              .value('.','NVARCHAR(MAX)'),1,1,'') AS [Data]
FROM EMP e
GROUP BY e.ID 

Набор результатов

╔════╦════════════════════════════════════════════════════════════════════════╗
║ ID ║                                  Data                                  ║
╠════╬════════════════════════════════════════════════════════════════════════╣
║  1 ║ (Jill Joane Oracle corp) (Jill Keane Oracle corp) (Jill Keane Infosys) ║
║  2 ║ (Anne Smith Oracle corp) (Anne Jordan Infosys)                         ║
╚════╩════════════════════════════════════════════════════════════════════════╝

Это не Пивот. Вам нужно объединить столбцы данных, сгруппировав идентификатор

CREATE TABLE #EMp (ID INT NOT NULL, EmployeeNameHistory VARCHAR(200) NOT NULL, CompanyWorked VARCHAR(200) NOT NULL)

INSERT INTO #EMp
VALUES (1, 'Jill Joane', 'Oracle corp')

INSERT INTO #EMp
VALUES (1, 'Jill Keane', 'Oracle corp')

INSERT INTO #EMp
VALUES (1, 'Jill Keane', 'Infosys')

INSERT INTO #EMp
VALUES (2, 'Anne Smith', 'Oracle corp')

INSERT INTO #EMp
VALUES (2, 'Anne Jordan', 'Infosys')

--Here your query goes
SELECT *
FROM #EMp

SELECT DISTINCT ID, (
        SELECT ' ( ' + EmployeeNameHistory + '' + CompanyWorked + ')'
        FROM #EMP E2
        WHERE E1.ID = E2.ID
        FOR XML PATH('')
        ) AS EMP_COMP
FROM #EMP E1
Другие вопросы по тегам