2013-08-29 130 views
0

我從同一個數據庫連接4個表。我的查詢正在返回我之後的數據,但也爲某些記錄返回多行。我只想要爲每個WKO_WorkOrderID使用最新的LastReportedHrsDate。有人可以幫我用正確的代碼來過濾嗎?SQL Server 2008篩選

代碼(我仍然很新的SQL ..):

SELECT  dbo.PLT.PLT_ItemID, SUM(dbo.PLD.PLD_IssueQty) AS Issued, dbo.WKO.WKO_WorkOrderID, dbo.WKO.WKO_RequiredQty, dbo.WKO.WKO_CompleteQty, 
         dbo.WKO.WKO_RequiredQty - dbo.WKO.WKO_CompleteQty AS openbalance, dbo.PLT.PLT_QtyPerAssy, 
         (dbo.WKO.WKO_CompleteQty * dbo.PLT.PLT_QtyPerAssy - SUM(dbo.PLD.PLD_IssueQty)) * - 1 AS WIP, dbo.WKO.WKO_ItemID, dbo.WOO.WOO_StatusCode, 
         dbo.WOO.WOO_LastReportedHrsDate, dbo.WOO.WOO_WorkCenterID 
FROM   dbo.PLT INNER JOIN 
         dbo.PLD ON dbo.PLT.PLT_RecordID = dbo.PLD.PLD_PLT_RecordID INNER JOIN 
         dbo.WKO ON dbo.PLT.PLT_WorkOrderID = dbo.WKO.WKO_WorkOrderID LEFT OUTER JOIN 
         dbo.WOO ON dbo.PLT.PLT_WorkOrderID = dbo.WOO.WOO_WorkOrderID 
WHERE  (dbo.WKO.WKO_StatusCode = N'Released') AND (dbo.PLT.PLT_ItemID = '9005-20-1794') 
GROUP BY dbo.PLT.PLT_ItemID, dbo.WKO.WKO_WorkOrderID, dbo.WKO.WKO_RequiredQty, dbo.WKO.WKO_CompleteQty, dbo.PLT.PLT_QtyPerAssy, dbo.WKO.WKO_ItemID, 
         dbo.WOO.WOO_StatusCode, dbo.WOO.WOO_LastReportedHrsDate, dbo.WOO.WOO_WorkCenterID 
HAVING  (SUM(dbo.PLD.PLD_IssueQty) = dbo.WKO.WKO_RequiredQty * dbo.PLT.PLT_QtyPerAssy) AND (dbo.WOO.WOO_LastReportedHrsDate IS NOT NULL) AND 
         (dbo.WOO.WOO_StatusCode IS NOT NULL) 
ORDER BY dbo.WKO.WKO_WorkOrderID 

不能發表我的結果的PIC

回答

1

請試試這個:

SELECT  max(dbo.WOO.WOO_LastReportedHrsDate),dbo.PLT.PLT_ItemID, SUM(dbo.PLD.PLD_IssueQty) AS Issued, dbo.WKO.WKO_WorkOrderID, dbo.WKO.WKO_RequiredQty, dbo.WKO.WKO_CompleteQty, 
         dbo.WKO.WKO_RequiredQty - dbo.WKO.WKO_CompleteQty AS openbalance, dbo.PLT.PLT_QtyPerAssy, 
         (dbo.WKO.WKO_CompleteQty * dbo.PLT.PLT_QtyPerAssy - SUM(dbo.PLD.PLD_IssueQty)) * - 1 AS WIP, dbo.WKO.WKO_ItemID, dbo.WOO.WOO_StatusCode, 
         dbo.WOO.WOO_WorkCenterID 
FROM   dbo.PLT INNER JOIN 
         dbo.PLD ON dbo.PLT.PLT_RecordID = dbo.PLD.PLD_PLT_RecordID INNER JOIN 
         dbo.WKO ON dbo.PLT.PLT_WorkOrderID = dbo.WKO.WKO_WorkOrderID LEFT OUTER JOIN 
         dbo.WOO ON dbo.PLT.PLT_WorkOrderID = dbo.WOO.WOO_WorkOrderID 
WHERE  (dbo.WKO.WKO_StatusCode = N'Released') AND (dbo.PLT.PLT_ItemID = '9005-20-1794') 
AND (dbo.WOO.WOO_LastReportedHrsDate IS NOT NULL) AND (dbo.WOO.WOO_StatusCode IS NOT NULL) 
GROUP BY dbo.PLT.PLT_ItemID, dbo.WKO.WKO_WorkOrderID, dbo.WKO.WKO_RequiredQty, dbo.WKO.WKO_CompleteQty, dbo.PLT.PLT_QtyPerAssy, dbo.WKO.WKO_ItemID, 
         dbo.WOO.WOO_StatusCode, dbo.WOO.WOO_WorkCenterID 
HAVING  (SUM(dbo.PLD.PLD_IssueQty) = dbo.WKO.WKO_RequiredQty * dbo.PLT.PLT_QtyPerAssy) 
ORDER BY dbo.WKO.WKO_WorkOrderID 
+0

謝謝你你的幫助!它返回一個錯誤:消息8120,級別16,狀態1,行4 列'dbo.WOO.WOO_LastReportedHrsDate'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。當我將該列添加到Group By子句時,它將返回相同的重複記錄。 – jballard81

+0

由於我們試圖獲取WOO_LastReportedHrsDate列的最大值,因此它不需要在group by中。我編輯了我的查詢,請立即嘗試。 – Sonam

+0

肯定會更近一步,但會返回多個WorkerOrders。我不太確定爲什麼它仍然返回多個,當查詢指定MAX時。這裏是在我的公共保管箱文件夾中的.XLS結果:https://dl.dropboxusercontent.com/u/77130984/results.xlsx – jballard81