从一个表中获取两个不同的返回列,但使用不同的过滤器

时间:2018-07-17 18:45:25

标签: sql sql-server

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

例如:

表1

Key  ID  
123  1
789  2

表2

Key  Type  Name
123  R     Red
123  B     Blue
789  R     Black
789  D     DULL

表3(我要返回的结果)

Key  Type R  Type B
123  Red     Blue
789  Black

类型R和类型B可能不止于此,因此我需要确保仅返回该信息,并将该信息明确地放在表3的相关列中。

2 个答案:

答案 0 :(得分:1)

一种方法是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中都是相同的。

答案 1 :(得分:0)

另一个选择是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