2012-07-21 85 views
0

我有一個庫存表,我想要GROUP BY不同批次的相同mfgpn,所以我使用數量上的SUM()函數來組合記錄。我想嘗試和拉最後的製造商記錄爲該組,因爲它可能是最新的/準確的,但我似乎無法讓製造商領域歸類在最後的製造商的所有通用部件號,所以我仍然有一個結果中有大量重複記錄。Group BY與SUM()結合返回第一條記錄

目前,我有以下的SELECT查詢:

SELECT SUM([QTY]) AS QTY 
     ,[MFGPN] 
    , (SELECT TOP 1 Manufacturer FROM [post].[dbo].[BF-prefix] B2 WHERE B2.MFGPN=MIN(B.mfgpn)) AS MANUFACTURER 
    FROM [post].[dbo].[BF-prefix] B 
    GROUP BY mfgpn, MANUFACTURER 
    ORDER BY MFGPN ASC 

我SQL Server 2008上運行,如果有什麼差別。

回答

3

你可以使用窗口函數來達到你需要的東西:

;WITH T AS 
( SELECT MFGPN, 
      Manufacturer, 
      SUM(Qty) OVER(PARTITION BY MFGPN) AS Qty, 
      ROW_NUMBER() OVER(PARTITION BY MFGPN ORDER BY Manufacturer) AS RowNumber 
    FROM [Post].[dbo].[BF-prefix] 
) 
SELECT * 
FROM T 
WHERE RowNumber = 1 

我只是不知道你是如何定義的「最後製造商」我假設你有一個日期字段對於這一點,所以你可能會需要更改此行中的訂單條款

ROW_NUMBER() OVER(PARTITION BY MFGPN ORDER BY Manufacturer) AS RowNumber