SQL选择具有不同where的相同列,然后连接并附加到外部查询

时间:2016-11-05 13:14:10

标签: sql join db2 subquery udb

我是SQL新手。我有两个表, CarDesc CarCost CarDesc 表驱动查询填充。我正在尝试选择 CAR_DESC where ID In List(1,2,3),然后将 ID 加入 CarCost 表返回 2D费用的列和 4D费用的列。

CarDesc

ID   CAR_DESC  COUNTRY
1    Toyota    Japan
2    Honda     Japan
3    Kia       Korea
4    Jeep      USA
5    Ford      USA

CarCost

ID   TYPE   COST
1    2D     3000
1    4D     2700
2    2D     4000
2    4D     5500
3    2D     3200
3    4D     5000

这是我尝试接收的预期结果:每个车辆描述的一个不同记录,然后是 2D成本的列,然后是 4D成本的列

CAR_DESC 2D_COST  4D_COST
Toyota   3000     2700
Honda    4000     5500
Kia      3200     5000

我认为我与SQL很接近,但在调整代码时我只是不断收到错误消息。你能帮我解决一下我的SQL吗?这就是我到目前为止......

SELECT DESC 
FROM CarDesc
WHERE ID IN LIST (1,2,3)
LEFT JOIN (SELECT COST AS 2D_COST
           WHERE TYPE = 2D)
     ON CarDesc.ID = CarCost.ID
LEFT JOIN (SELECT COST AS 4D_COST
           WHERE TYPE = 4D)
     ON CarDesc.ID = CarCost.ID

2 个答案:

答案 0 :(得分:1)

查询将如下所示:

SELECT cd.*, cc2.cost as cost_2d, cc4.cost as cost_4d
FROM CarDesc cd LEFT JOIN
     CarCost cc2
     ON cd.Id = cc2.id AND cc2.TYPE = '2D' LEFT JOIN
     CarCost cc4
     ON cd.Id = cc4.id AND cc4.TYPE = '4D'
WHERE cd.ID IN (1, 2, 3);

您的查询中有很多错误。不值得尝试解释它们。检查此查询以了解它应如何工作。

答案 1 :(得分:0)

 SELECT cd.ID ,
 sum(case when cc.type='2D' then cc.cost else 0 end) 2D_COST,  
 sum(case when cc.type='4D' then cc.cost else 0 end) 4D_COST
 FROM CarDesc cd LEFT JOIN CarCost cc ON cd.Id = cc.id 
 WHERE cd.ID IN (1, 2, 3)
 group by cd.ID