2017-01-21 91 views
-1

我有這個查詢,我需要在我的第一個查詢中添加一個where子句(WHERE order_number = 1),但它不起作用。在Inner Join中添加WHERE子句的位置?

SELECT 
    last_name, 
    first_name, 
    total, 
    pickup_date, 
    MPU.salary, 
    MTU.materials, 
    OFU.otherfee 
FROM 
    finished AS FD 
     INNER JOIN 
    (SELECT 
     order_number, (SUM(salary * hours_worked)) AS 'salary' 
    FROM 
     manpower_used 
    GROUP BY order_number) AS MPU ON FD.order_number = MPU.order_number 
     INNER JOIN 
    (SELECT 
     order_number, (SUM(qty * price)) AS 'materials' 
    FROM 
     materials_used 
    GROUP BY order_number) AS MTU ON FD.order_number = MTU.order_number 
     INNER JOIN 
    (SELECT 
     order_number, 
      (SUM(overtime_fee + stair_fee + toll_fee)) AS 'otherfee' 
    FROM 
     other_fees 
    GROUP BY order_number) AS OFU ON FD.order_number = OFU.order_number 

謝謝!

+1

在結束'..Where fd.order_number = 1'或以任何'ON 'condition' FD.order_number = MPU.order_number and fd.order_number = 1' –

+0

at it at your end of the query。 – kritikaTalwar

回答

0

最後。

SELECT 
    last_name, 
    first_name, 
    total, 
    pickup_date, 
    MPU.salary, 
    MTU.materials, 
    OFU.otherfee 
FROM 
    finished AS FD 
     INNER JOIN 
    (SELECT 
     order_number, (SUM(salary * hours_worked)) AS 'salary' 
    FROM 
     manpower_used 
    GROUP BY order_number) AS MPU ON FD.order_number = MPU.order_number 
     INNER JOIN 
    (SELECT 
     order_number, (SUM(qty * price)) AS 'materials' 
    FROM 
     materials_used 
    GROUP BY order_number) AS MTU ON FD.order_number = MTU.order_number 
     INNER JOIN 
    (SELECT 
     order_number, 
      (SUM(overtime_fee + stair_fee + toll_fee)) AS 'otherfee' 
    FROM 
     other_fees 
    GROUP BY order_number) AS OFU ON FD.order_number = OFU.order_number 
    Where FD.order_number = 1 -- here 

爲了比較日期(說pickup_date)的年份和月份,您可以添加其他過濾器,像這樣:

AND date_format(pickup_date,'%m-%Y') = date_format(curdate(),'%m-%Y') 
+0

謝謝先生最後一個問題,如何在本月和今年檢索數據? – Aaron

+0

@Aaron在答案 – GurV

-2

你已經在你的查詢中使用聚合函數,這就是爲什麼WHERE不會工作。你必須使用HAVING關鍵字而不是WHERE。嘗試使用HAVING,我希望它能爲你工作。

+0

中更新只有在Group By子句後需要過濾條件時,才具有重要性,此處group by用於聚合,然後用作表。 –

0

前組由作爲Where條款,如果它是在沒有聚集現場,

Select [stuff] 
From [tables and joins] 
Where [Filter predicates] 
group by [grouping expressions] 

,如:

Select s.storeId, count(*) 
from stores s join storeproducts sp 
    on sp.storeId = s.storeId 
Where s.State = 'CA' 
group by s.storeId 

在組後爲Having條款如果涉及聚合函數

Select [stuff] 
From [tables and joins] 
group by [grouping expressions] 
Having [filter predicates on aggregate expressions] 

like:

Select s.storeId, count(*) 
from stores s join storeproducts sp 
    on sp.storeId = s.storeId 
group by s.storeId 
having count(*) > 12 
你的情況

,存在外部查詢沒有group by,所以在端部作爲where子句

SELECT last_name, first_name, total, 
    pickup_date, MPU.salary, MTU.materials, OFU.otherfee 
FROM finished f 
    JOIN (SELECT order_number, 
      (SUM(salary * hours_worked)) 'salary' 
      FROM manpower_used 
      GROUP BY order_number) n 
     ON n.order_number = f.order_number 
    JOIN (SELECT order_number, SUM(qty * price) 'materials' 
      FROM materials_used 
      GROUP BY order_number) t 
     ON t.order_number = f.order_number 
    JOIN (SELECT order_number, 
      SUM(overtime_fee + stair_fee + toll_fee) 'otherfee' 
      FROM other_fees 
      GROUP BY order_number) o 
     ON o.order_number = f.order_number 
Where f.order_number = 1 -- here