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