我是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
答案 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