Sql 从一个表中获取两个不同的返回列,但筛选器不同

Sql 从一个表中获取两个不同的返回列,但筛选器不同,sql,sql-server,Sql,Sql Server,我有两个表,我需要一个表中的某些数据,然后我需要连接另一个表。然而,联接表只有一列我需要,但我需要它根据其中的信息类型在两个不同的列中返回它 例如: 表1 Key ID 123 1 789 2 表2 Key Type Name 123 R Red 123 B Blue 789 R Black 789 D DULL 表3(我试图返回的结果) 可能不仅仅是类型R和类型B,所以我需要确保我只返回该信息,但具体地将该信息放在表3的列中 一种方法是

我有两个表,我需要一个表中的某些数据,然后我需要连接另一个表。然而,联接表只有一列我需要,但我需要它根据其中的信息类型在两个不同的列中返回它

例如:

表1

Key  ID  
123  1
789  2
表2

Key  Type  Name
123  R     Red
123  B     Blue
789  R     Black
789  D     DULL
表3(我试图返回的结果)


可能不仅仅是类型R和类型B,所以我需要确保我只返回该信息,但具体地将该信息放在表3的列中

一种方法是
join

select t1.*, t2r.name as r_name, t2b.name as b_name
from table1 t1 left join
     table2 t2r
     on t2r.key = t1.key and t2r.type = 'R' left join
     table2 t2b
     on t2b.key = t1.key and t2b.type = 'B';

这是标准SQL,在MySQL和SQL Server中都是一样的。

另一个选项是PIVOT

示例

Select *
 From (
        Select [Key]
              ,Item=concat('Type ',[Type])
              ,Value=[Name] 
         From  YourTable
         Where [Type] in ('R','B')
       ) src
 Pivot (max(value) for Item in ([Type R],[Type B]) ) pvt
返回

Key Type R  Type B
123 Red     Blue
789 Black   NULL

MySQL还是SQL Server?投票反对不指定您使用的是MySQL还是SQL-Server。对不起,SQL Server。
Key Type R  Type B
123 Red     Blue
789 Black   NULL