2012-07-21 84 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