合并基于一列的两个表,其中重复值有自己的列
Combining Two Tables Based on One Column Where Duplicate Values Get Their Own Column
注意:我正在使用 SQL Server Management Studio 2014
我在 SQL 中遇到了一个问题,我希望得到解决。总体目标是以非常特定的格式将其导出到 excel。我已经尝试导出原始数据并在 Excel 中进行所有配置,但我使用的公式不够快,无法完成任务(这是一场数据清理噩梦)所以我想我会尝试做它在 SQL 我应该从一开始就尝试过的地方。那么我们开始吧...
我有两个表,我们称它们为 Table_1 和 Table_2。
Table_1 有一个 ID 和一个数据列。可以有许多具有不同数据值的相同 ID。 (结构见附件Excel Spreadsheet)
Table_2 有一个 ID 列,它是连接两个表的外键。
我想做一个 SELECT 语句来以 运行 查询后的预期结果中显示的格式显示信息(再次参见 excel sheet ) 请注意,在 运行 查询后的预期结果中,每条记录只有一个 ID。 (我正在寻找要在 SQL Server Management Studio 中显示的查询,而不是直接 Excel 显然哈哈只是想尽可能清楚)
这是我能想到的最简单的示例,实际上对于我的真实数据,我需要在 Table_1 的多个列上 运行 此查询并显示所有结果。
我觉得我应该让它尽可能简单,一旦我对它有了感觉,我就可以在它的基础上进行构建。我检查了其他一些堆栈答案,但我在阅读答案时遇到了一些问题,因为它们对我来说没有意义,或者它们需要执行不同的任务。任何想法或见解将不胜感激!
提前致谢!
这正是您所需要的:
with m as (
select
ROW_NUMBER() over (partition by id order by data) as Nr,
table_1.id, table_1.data
from table_1
)
select
table_2.id,
m1.data as Mail1,
m2.data as Mail2,
m3.data as Mail3,
m4.data as Mail4
from table_2
left join m m1 on (m1.Nr=1 and m1.id=table_2.id)
left join m m2 on (m2.Nr=2 and m2.id=table_2.id)
left join m m3 on (m3.Nr=3 and m3.id=table_2.id)
left join m m4 on (m4.Nr=4 and m4.id=table_2.id)
结果是:
*-------*------------*----------*----------*-------*
|id |Mail1 | Mail2 | Mail3 | Mail4 |
|5290 |cheese | napkin |pie | sauce|
|7893 |cheetos | chipoltle|NULL | NULL |
|10170 |fries | NULL | NULL | NULL |
|10179 |burgers | NULL | NULL | NULL |
|42069 |apple sauce | chilli | NULL | NULL |
|78913 |baked beans | NULL | NULL | NULL |
*-------*------------*----------*----------*-------*
注意:我正在使用 SQL Server Management Studio 2014
我在 SQL 中遇到了一个问题,我希望得到解决。总体目标是以非常特定的格式将其导出到 excel。我已经尝试导出原始数据并在 Excel 中进行所有配置,但我使用的公式不够快,无法完成任务(这是一场数据清理噩梦)所以我想我会尝试做它在 SQL 我应该从一开始就尝试过的地方。那么我们开始吧...
我有两个表,我们称它们为 Table_1 和 Table_2。
Table_1 有一个 ID 和一个数据列。可以有许多具有不同数据值的相同 ID。 (结构见附件Excel Spreadsheet)
Table_2 有一个 ID 列,它是连接两个表的外键。
我想做一个 SELECT 语句来以 运行 查询后的预期结果中显示的格式显示信息(再次参见 excel sheet ) 请注意,在 运行 查询后的预期结果中,每条记录只有一个 ID。 (我正在寻找要在 SQL Server Management Studio 中显示的查询,而不是直接 Excel 显然哈哈只是想尽可能清楚)
这是我能想到的最简单的示例,实际上对于我的真实数据,我需要在 Table_1 的多个列上 运行 此查询并显示所有结果。
我觉得我应该让它尽可能简单,一旦我对它有了感觉,我就可以在它的基础上进行构建。我检查了其他一些堆栈答案,但我在阅读答案时遇到了一些问题,因为它们对我来说没有意义,或者它们需要执行不同的任务。任何想法或见解将不胜感激!
提前致谢!
这正是您所需要的:
with m as (
select
ROW_NUMBER() over (partition by id order by data) as Nr,
table_1.id, table_1.data
from table_1
)
select
table_2.id,
m1.data as Mail1,
m2.data as Mail2,
m3.data as Mail3,
m4.data as Mail4
from table_2
left join m m1 on (m1.Nr=1 and m1.id=table_2.id)
left join m m2 on (m2.Nr=2 and m2.id=table_2.id)
left join m m3 on (m3.Nr=3 and m3.id=table_2.id)
left join m m4 on (m4.Nr=4 and m4.id=table_2.id)
结果是:
*-------*------------*----------*----------*-------*
|id |Mail1 | Mail2 | Mail3 | Mail4 |
|5290 |cheese | napkin |pie | sauce|
|7893 |cheetos | chipoltle|NULL | NULL |
|10170 |fries | NULL | NULL | NULL |
|10179 |burgers | NULL | NULL | NULL |
|42069 |apple sauce | chilli | NULL | NULL |
|78913 |baked beans | NULL | NULL | NULL |
*-------*------------*----------*----------*-------*