2013-10-19 28 views
0

表1SQL和與鏈接區

prodUID (*) plantID ItemName size  qty 
    1    1  car  med  5 
    2    1  car  small  2 
    3    1  car  large  8 
    4    1  truck  small  7 
    5    1  truck  med  0 
    6    1  truck  large  4 
    7    1  van  small  0 
    8    2  truck  large 10 

表2

UID(*) plantID table2_plan_tid table2_prodUID itemname size  num wk 
------------------------------------------------------------------------------ 
    1  1   1    car     med  3 41 
    2  1   2    car     small  0 42  
    3  1   3    car     large  6 41 
    4  1   4    truck     small  1 44 
    5  1   5    truck     med  10 45  
    6  1   6    truck     large  1 43 
    7  1   7    van     small  7 42 
    8  2   8    car     med  10 41 

表3

UID(*) plantid table3_wk table3_prodUID itemName size  qty 
------------------------------------------------------------------ 
    1  1  41   2   car  med  5 
    2  1  41   3   car  large  7 
    3  1  43   7   van  small  8 

結果我想要得到的是

  • for plantid =?和之間?和?
  • plantid = 1和周41和45之間

  • 總和數量爲表1上plantID

  • 總和週上plantID表2和週上表
  • 總和數量與plantID和周

和一些如何與連接或子鏈接此得到

plantid Itemname qty num order 
------------------------------------ 
    1  car  15 9  12 
    1  truck  11 12  0 
    1  van   0 7  8 

我似乎無法得到正確的結果

我也算是把在itemNameID場中的所有表

如果這將使它更容易

+0

歡迎使用StackOverflow:如果您發佈代碼,XML或數據示例,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)格式和語法突出顯示它!那麼你不需要那些雜亂的' '和'
'標籤,要麼! –

回答

0

你可以達到你想要使用此查詢什麼:

SELECT table1.plantID, table1.ItemName, SUM(table1.qty), COALESCE(t2.num_sum, 0), COALESCE(t3.qty_sum, 0) 
FROM table1 
LEFT JOIN (SELECT plantid, itemname, SUM(num) AS num_sum 
     FROM table2 
     WHERE wk >= 41 AND wk <= 45 
     GROUP BY plantID, itemname) t2 ON table1.plantID = t2.plantID AND table1.ItemName = t2.ItemName 
LEFT JOIN (SELECT plantid, itemname, SUM(qty) AS qty_sum 
     FROM table3 
     WHERE table3_wk >= 41 AND table3_wk <= 45 
     GROUP BY plantID, itemname) t3 ON table1.plantID = t3.plantID AND table1.ItemName = t3.ItemName 
WHERE table1.plantid = 1 
GROUP BY plantID, ItemName 

See also live!

基本上,你爲了得到參加3個查詢你想要什麼。 如果你尊重某個和諧與你的列名稱,這將是一個更清潔。

+0

謝謝你的完美 – dnice