我可以使用SQL将另一个表中多行的值合并到一行的多个列中吗?

我可以使用SQL将另一个表中多行的值合并到一行的多个列中吗?,sql,sql-server-2008,sql-server-2008-r2,Sql,Sql Server 2008,Sql Server 2008 R2,我有两张桌子: T1: T2: 现在,我想用一个查询来选择: | M_ID | P_1a | P_1b | P_2a | P_2b | rest of T1 columns | | 0 | a | e | b | f | ... | | 1 | c | g | c | h | ... | 换句话说,我想选择T1中的所有列,但我想用T2中的列替换p_ID1,其中p_ID等于p_

我有两张桌子: T1:

T2:

现在,我想用一个查询来选择:

| M_ID | P_1a | P_1b | P_2a | P_2b | rest of T1 columns |
|  0   |  a   |  e   |  b   |  f   |         ...        |
|  1   |  c   |  g   |  c   |  h   |         ...        |
换句话说,我想选择T1中的所有列,但我想用T2中的列替换p_ID1,其中p_ID等于p_ID1,类型为1,p_ID2基本相同

显然,我可以通过多个查询获得所需的信息,但我想知道是否有一种方法可以通过一个查询实现这一点。有什么想法吗

我目前正在使用SQLServer2008R2,但我也对其他数据库软件的解决方案感兴趣


谢谢你的帮助

当然,您只需要使用连接:

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1, T2 t2_1, T2 t2_2
where T1.P_ID1 = t2_1.P_ID and T1.P_ID2 = t2_2.P_ID 

基本上,我们将T1连接到T2上两次,一次连接p_1值,第二次连接p_2值。当您连接T2两次时,需要将其别名为T2以区分两者(这就是T2_1和T2_2-区分连接T2的两个实例的一种方法)。

这与@John Pick的解决方案相同,仅使用现代连接语法:

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1
     join T2 t2_1 on T1.P_ID1 = t2_1.P_ID 
     join T2 t2_2 on T1.P_ID2 = t2_2.P_ID 
我只发布了一个单独的答案,因为评论中没有代码格式

select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1, T2 t2_1, T2 t2_2
where T1.P_ID1 = t2_1.P_ID and T1.P_ID2 = t2_2.P_ID 
select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1
     join T2 t2_1 on T1.P_ID1 = t2_1.P_ID 
     join T2 t2_2 on T1.P_ID2 = t2_2.P_ID