SQL выбирает тот же столбец с другим где, затем присоединяется и добавляется к внешнему запросу

Я новичок в SQL. У меня есть две таблицы, CarDesc и CarCost. Таблица CarDesc определяет количество запросов. Я пытаюсь выбрать столбец CAR_DESC where ID In List(1,2,3) а затем присоедините идентификатор к таблице 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 ответа

Решение

Запрос будет выглядеть примерно так:

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);

У вас есть многочисленные ошибки в вашем запросе. Не стоит пытаться их объяснить. Изучите этот запрос, чтобы понять, как он должен работать.

 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 
Другие вопросы по тегам