【问题标题】:SQL Server : need to pivot some columnsSQL Server:需要旋转一些列
【发布时间】:2021-01-15 16:06:46
【问题描述】:

我在 SQL Server 2016 中有一个 HR 系统。我需要从一个员工表(如下所示)构建一个结果集(表)。这个想法是识别员工拥有的所有姓名,并将其转换为单个列。最常见的情况是一个人结婚后改姓。

emp_number  emp_fname   emp_lname
----------------------------------
1            Marilyn    Jones
2            Joan       Smith
3            Jean       Robinson
4            Shelia     Hayes
4            Shelia     Mclean
4            Shelia     Taylor
5            Heather    Iles
6            Lisa       Norman
7            Andrea     Plant
7            Andrea     Clancy

我需要为每个 emp_number 设置一行。在该行中,如果 emp 编号有多个记录,则旋转 emp_fname 和 emp_lname,连接这些字段,然后写入单个记录。下表是我的目标

emp_number  emp_name_concat
-----------------------------
1           Marilyn Jones
2           Joan Smith
3           Jean Robinson
4           Shelia Hayes , Shelia Mclean , Shelia Taylor 
5           Heather Iles
6           Lisa Norman 
7           Andrea Plant, Andrea Clancy

我正在查看枢轴示例,但它们似乎显示了要旋转的行数已知的场景。从理论上讲,一个人可以多次更改姓氏。而且,不需要对所有行进行透视。

任何建议将不胜感激,

谢谢

【问题讨论】:

标签: sql-server pivot


【解决方案1】:

由于您使用的是 2016 版本,因此您无法使用 STRING_AGG()... 也许以下方法可以使用。

DECLARE @Table TABLE (emp_number INT, emp_fname NVARCHAR(100), emp_lname NVARCHAR(100))
INSERT @Table VALUES
(1,'Marilyn'    ,'Jones'),
(2,'Joan'       ,'Smith'),
(3,'Jean'       ,'Robinson'),
(4,'Shelia'     ,'Hayes'),
(4,'Shelia'     ,'Mclean'),
(4,'Shelia'     ,'Taylor'),
(5,'Heather'    ,'Iles'),
(6,'Lisa'       ,'Norman'),
(7,'Andrea'     ,'Plant'),
(7,'Andrea'     ,'Clancy')



SELECT DISTINCT
  t.emp_number,
  STUFF
  ((
    SELECT ', ' + t2.emp_fname + ' ' + t2.emp_lname
      FROM @Table t2
      WHERE t2.emp_number = t.emp_number
      FOR XML PATH('')
  ), 1, 2, N''
  ) AS emp_name_concat
FROM @Table t
ORDER BY t.emp_number;

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多