2013-10-21 38 views
1

我從4個不同的表中獲取這些數據。我想要的信息正在返回,但是它的重複取決於項目已經通過的WorkCenterID的數量。我希望它只返回最大的工作中心ID。SQL Server 2008的一點過濾器/分組幫助

下面是代碼:

SELECT  PLT.PLT_ItemID 
     , SUM(PLD.PLD_IssueQty) AS Issued 
     , WKO.WKO_WorkOrderID 
     , WKO.WKO_RequiredQty 
     , WKO.WKO_CompleteQty 
     , WKO.WKO_RequiredQty - WKO.WKO_CompleteQty AS openbalance 
     , PLT.PLT_QtyPerAssy 
     , (WKO.WKO_CompleteQty * PLT.PLT_QtyPerAssy - SUM(PLD.PLD_IssueQty)) * - 1 AS WIP 
     , WKO.WKO_ItemID 
     , WKO.WKO_StatusCode 
     , WKO.WKO_LastWorkDate 
     , WOO.WOO_WorkCenterID 
FROM  PLT 
       INNER JOIN PLD ON PLT.PLT_RecordID = PLD.PLD_PLT_RecordID 
       INNER JOIN WKO ON PLT.PLT_WorkOrderID = WKO.WKO_WorkOrderID 
       LEFT OUTER JOIN WOO ON PLT.PLT_WorkOrderID = WOO.WOO_WorkOrderID 
WHERE  (WKO.WKO_StatusCode = N'Released') 
     AND (PLT.PLT_ItemID = '1700-0535501-01') 
GROUP BY PLT.PLT_ItemID 
     , WKO.WKO_WorkOrderID 
     , WKO.WKO_RequiredQty 
     , WKO.WKO_CompleteQty 
     , PLT.PLT_QtyPerAssy 
     , WKO.WKO_ItemID 
     , WKO.WKO_LastWorkDate 
     , WOO.WOO_WorkCenterID 
     , WKO.WKO_StatusCode 
HAVING  (SUM(PLD.PLD_IssueQty) = WKO.WKO_RequiredQty * PLT.PLT_QtyPerAssy) 
ORDER BY WKO.WKO_WorkOrderID 

下面是結果:

PLT_ItemID Issued WKO_WorkOrderID WKO_RequiredQty WKO_CompleteQty openbalance PLT_QtyPerAssy WIP WKO_ItemID WKO_StatusCode WKO_LastWorkDate WOO_WorkCenterID 
1700-0535501-01 10 WO43620 10 10 0 1 0 9121-VA2-M Released 2011-10-17 00:00:00.000 1010 
1700-0535501-01 10 WO43620 10 10 0 1 0 9121-VA2-M Released 2011-10-17 00:00:00.000 110 
1700-0535501-01 10 WO43620 10 10 0 1 0 9121-VA2-M Released 2011-10-17 00:00:00.000 810 
1700-0535501-01 2 WO53259 2 2 0 1 0 9120-DE45R-M Released 2012-03-05 00:00:00.000 110 
1700-0535501-01 2 WO53259 2 2 0 1 0 9120-DE45R-M Released 2012-03-05 00:00:00.000 810 
1700-0535501-01 6 WO53697 6 6 0 1 0 9120-DE45-M Released 2012-03-30 00:00:00.000 110 
1700-0535501-01 6 WO53697 6 6 0 1 0 9120-DE45-M Released 2012-03-30 00:00:00.000 810 
1700-0535501-01 5 WO86275 5 0 5 1 5 9121-VA2-M Released 2013-10-18 00:00:00.000 110 
+0

相關(來自同一OP):SQL Server 2008中的濾波(http://stackoverflow.com/q/18520563/211627) – JDB

+0

您的預期成果是什麼? – EricZ

回答

0

您可以使用ROW_NUMBER()函數。就像這樣:

WITH a AS ( 
    SELECT ROW_NUMBER() OVER(PARTITON BY WKO.WKO_WorkOrderID ORDER BY WKO.WKO_WorkOrderID) AS RowNo  
     , PLT.PLT_ItemID 
     , SUM(PLD.PLD_IssueQty) AS Issued 
     , WKO.WKO_WorkOrderID 
     , WKO.WKO_RequiredQty 
     , WKO.WKO_CompleteQty 
     , WKO.WKO_RequiredQty - WKO.WKO_CompleteQty AS openbalance 
     , PLT.PLT_QtyPerAssy 
     , (WKO.WKO_CompleteQty * PLT.PLT_QtyPerAssy - SUM(PLD.PLD_IssueQty)) * - 1 AS WIP 
     , WKO.WKO_ItemID 
     , WKO.WKO_StatusCode 
     , WKO.WKO_LastWorkDate 
     , WOO.WOO_WorkCenterID 
FROM  PLT 
       INNER JOIN PLD ON PLT.PLT_RecordID = PLD.PLD_PLT_RecordID 
       INNER JOIN WKO ON PLT.PLT_WorkOrderID = WKO.WKO_WorkOrderID 
       LEFT OUTER JOIN WOO ON PLT.PLT_WorkOrderID = WOO.WOO_WorkOrderID 
WHERE  (WKO.WKO_StatusCode = N'Released') 
     AND (PLT.PLT_ItemID = '1700-0535501-01') 
GROUP BY PLT.PLT_ItemID 
     , WKO.WKO_WorkOrderID 
     , WKO.WKO_RequiredQty 
     , WKO.WKO_CompleteQty 
     , PLT.PLT_QtyPerAssy 
     , WKO.WKO_ItemID 
     , WKO.WKO_LastWorkDate 
     , WOO.WOO_WorkCenterID 
     , WKO.WKO_StatusCode 
HAVING  (SUM(PLD.PLD_IssueQty) = WKO.WKO_RequiredQty * PLT.PLT_QtyPerAssy) 
) 

SELECT * FROM a WHERE a.RowNo = 1 

選擇只有你實際回報當然領域... :)

+0

所以我認爲這可能會有所幫助,我想要完成的是根據最大的工作中心ID爲每個零件號取一個不同的工作單號 所以基本上我希望看​​到3個總記錄返回。每個工作訂單最大的WorkcenterID – jballard81

+0

我不確定我是否理解你的意思,但是我更新了查詢以對WorkOrderId上的ROW_NUMBER()進行分區並按WorkCenterID對其進行排序。這樣你應該能夠得到想要的結果(當然,我明白你想要什麼......)當SELECT * WHERE RowNo = 1 – tillmannen