sql-server - SQL Server:需要旋转一些列
问题描述
我在 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
我正在查看枢轴示例,但它们似乎显示了要旋转的行数已知的场景。从理论上讲,一个人可以多次更改姓氏。而且,不需要对所有行进行旋转。
任何建议将不胜感激,
谢谢
解决方案
由于您使用的是 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;
推荐阅读
- sql - 在 SQL Server 中将重复数据从行转移到列
- python - python - 如何计算Python中不同格式的两个日期之间的天数?
- jenkins - 由于收件人列表为空,Jenkins Pipelines 定期构建不发送电子邮件通知
- python - 在 Python 中查找两个字典列表的差异
- javascript - JQuery按ID属性隐藏或显示
- css - 如何在元素中使用 for 循环应用动画?
- flask - Pyinstaller Flask 应用程序运行多个实例
- python - 我需要停止运行多线程代码
- javascript - 我需要更改多个具有相同id的css样式
- vb.net - 加载 VBNET DLL 性能缓慢