sql - SQL扩展表以合并具有重复数据的字段
问题描述
我有一个包含一些重复数据的表,我想将字段合并到一个表中。
我的数据目前如下所示:
name job1 Unit1_Level1 Unit1__Level2
-------------------------------------------------------
A Teacher Infomation Information_office
A Staff Secretary Secretary_office
B Teacher Finacial Finacial_office
C Teacher Engineer Engineer_office
C Staff Library Library_office
D Staff Library Library_office
我希望它看起来像这样:
name job1 Unit1_Level1 Unit1__Level2 job2 Unit2_Level1 Unit2__Level2
------------------------------------------------------------------------------------------------------
A Teacher Infomation Information_office Staff Secretary Secretary_office
B Teacher Finacial Finacial_office
C Teacher Engineer Engineer_office Staff Library Library_office
D Staff Library Library_office
希望有人能帮帮我,谢谢!
解决方案
您可以使用 row_number() 函数来计算同一个人的每次迭代(工作)。使用该数字,您可以返回他们第一次迭代的选择,并加入他们的第二次迭代......甚至加入第三次,第四次......迭代。
with cte as (
select name, job1, Unit1_Level1, Unit1_Level2,
row_number() over (partition by name order by job1 desc) as iteration
from MyTable
)
select i1.name, i1.job1, i1.Unit1_Level1, i1.Unit1_Level2,
i2.job1 as job2, i2.Unit1_Level1 as Unit2_Level1, i2.Unit1_Level2 as Unit2_Level2,
i3.job1 as job3, i3.Unit1_Level1 as Unit3_Level1, i3.Unit1_Level2 as Unit3_Level2
from cte as i1
left join cte as i2 on i2.name = i1.name and i2.iteration = 2
left join cte as i3 on i3.name = i1.name and i3.iteration = 3
where i1.iteration = 1
PS:您没有指明要按什么顺序返回同一个人的工作,所以我使用job1 desc来返回它们作为您的样本数据:第一个教师和第二个工作人员。
推荐阅读
- reactjs - React Context 无法导入
- c - 如何在 C 中取消引用和调用结构的函数
- jquery - 如何使用 JQuery AJAX 和 CodeIgniter 将 JSON 插入 MySQL?
- swift - 如何调试“尚未配置默认 Firebase 应用程序。”?
- javascript - 我如何使用“textarea name”来填写我在浏览器地址栏中输入的链接?
- ruby-on-rails - 克隆 Rails 项目并在本地机器上运行
- rust-cargo - Cargo 究竟如何检测文件更改?
- sql - 查找 OLAP/表格多维数据集后面的查询和源表名称
- visual-studio-code - 如何使用 VSCode 隐藏工作区中的根文件夹
- c# - 含站点变化的公交车座位计算动态算法