0

我有两个看起来像这样的表:

Table_X
id, cert_number, other random info

Table_Y
id, cert_number, type, name

出现问题是因为我在表 y 中有不同的类型,它们都适用于我想要返回的单个结果(即:所有者名称、承运人名称、目的地名称),这些结果基于类型。

有没有一种方法可以将它们与 owner_name、carrier_name 和 destination_name 组合成一个结果?

我使用 CASE 正确地将信息获取到结果中,但是由于我在 select 语句中使用了 type 字段,因此我为每个 cert_number 返回了 3 个结果。

提前致谢!

编辑:

这是一些示例数据。由于需要传递和检查大量参数,实际的 SQL 语句非常长。

table_x
 id  |  cert_number
 1       123-XYZ
 2       124-zyx

table_y
 id  |  cert_number |     type      |  name  
 1       123-XYZ      owner            bob
 2       123-XYZ      destination      paul
 3       124-zyx      owner            steve
 4       123-xyz      carrier          george
 5       124-zyx      carrier          mike
 6       124-zyx      destination      dan
4

1 回答 1

2

您可以将聚合函数与CASE表达式一起使用:

select x.cert_number,
  max(case when y.[type] = 'owner' then y.name end) owner_name,
  max(case when y.[type] = 'carrier' then y.name end) carrier_name,
  max(case when y.[type] = 'destination' then y.name end) destination_name
from table_x x
inner join table_y y
  on x.cert_number = y.cert_number
group by x.cert_number;

请参阅带有演示的 SQL Fiddle

type或者您可以多次加入您的桌子:

select x.cert_number,
  y1.name as owner_name,
  y2.name as carrier_name,
  y3.name as destination_name
from table_x x
left join table_y y1
  on x.cert_number = y1.cert_number
  and y1.type = 'owner'
left join table_y y2
  on x.cert_number = y2.cert_number
  and y2.type = 'carrier'
left join table_y y3
  on x.cert_number = y3.cert_number
  and y3.type = 'destination';

请参阅带有演示的 SQL Fiddle

于 2013-05-13T16:14:20.020 回答