2016-11-05 24 views
-1

我是SQL新手。我有兩張桌子,CarDesc and CarCost。該CarDesc表驅動查詢人口。我想選擇CAR_DESCwhere ID In List(1,2,3),然後在ID加入到CarCost表爲2D返回列成本併爲4D列成本SQL選擇不同的列在同一列,然後加入並追加到外部查詢

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 

回答

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

您的查詢的許多錯誤。試圖解釋它們並不值得。檢查此查詢以瞭解它應該如何工作。

+0

謝謝你,戈登。在TYPE之前添加表別名之後,這可以很好地工作。這對你來說可能很簡單,但是你爲我節省了很多時間和頭痛。非常感激。祝你有美好的一天! – steveW

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