在SQL Server中只有一列没有聚合的数据透视表

时间:2016-12-01 11:10:33

标签: sql-server pivot-table

我的表格包含IDEmployeeNameHistoryCompanyWorked

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,第二列是'(' + EmployeeNameHistory + CompanyWorked + ')'

我该怎么做?

由于 MR

3 个答案:

答案 0 :(得分:1)

查询

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)                         ║
╚════╩════════════════════════════════════════════════════════════════════════╝

答案 1 :(得分:1)

使用不同的ID列表操作的另一个选项

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)

答案 2 :(得分:0)

这不是Pivot。您需要通过对ID

进行分组来连接列Data
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