0

我有一个库存表,我想要GROUP BY不同批次的相同 mfgpn,所以我使用SUM()数量上的函数来组合类似的记录。我想尝试为该组提取记录中的最后一个 MANUFACTURER,因为它可能是最新/最准确的,但我似乎很难让 MANUFACTURER 字段对最后一个 MANUFACTURER 下的所有常见零件号进行分组,所以我仍然有一个结果中的一堆重复记录。

我目前有以下 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 上运行。

4

1 回答 1

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

我只是不确定你是如何定义“最后一个制造商”的,我假设你有一个日期字段,所以你可能需要在这一行中更改 order by 子句

ROW_NUMBER() OVER(PARTITION BY MFGPN ORDER BY Manufacturer) AS RowNumber
于 2012-07-21T07:56:39.533 回答