注意:我正在使用SQL Server Management Studio 2014
我在SQL中遇到了一个问题,我想整理一下。总体目标是以非常特定的格式将其导出为excel。我已经尝试导出原始数据并在Excel中进行所有配置,但他使用的公式不够快,无法执行任务(这是数据清理的噩梦)所以我想我会尝试在SQL中执行此操作我应该从一开始就尝试过。所以我们走了......
我有两个表,我们称之为Table_1和Table_2。
Table_1有一个ID和一个数据列。可以有许多具有不同数据值的相同ID。 (请参阅随附的Excel电子表格了解结构)
Table_2有一个ID列,它是连接两个表的外键。
我想做一个SELECT语句来显示格式的信息,如运行查询后的预期结果所示(再次参见excel表)注意,在运行查询后的预期结果中,每条记录只有一个ID 。 (我正在寻找要在SQL Server Management Studio中显示的查询,而不是直接显示到Excel,显然哈哈只想尽可能清楚)
这是我能想到的最简单的例子,实际上我需要在Table_1的多个列上运行此查询并显示所有结果。
我觉得我应该尽可能简单地保持它,一旦我对它有所感受,我就可以建立它。我检查了其他一些堆栈的答案,但我在阅读答案时遇到了一些问题,因为它们对我没有意义,或者他们需要完成不同的任务。任何想法或见解将不胜感激!
提前致谢!
答案 0 :(得分: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 |
*-------*------------*----------*----------*-------*