0

GROUP BY同じ mfgpn の異なるロットを作成したい在庫テーブルがあるので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で実行しています。

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 に答える