合并基于一列的两个表,其中重复值有自己的列

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  |  
*-------*------------*----------*----------*-------*