1

製品の将来の在庫の日付と数量をリストするデータセットがあります。時折、私たちの需要は私たちの将来の供給を上回り、私たちは負の将来の量になってしまいます。その将来の負の量を以前の供給に織り込む必要があるので、供給を売り過ぎて問題を悪化させることはありません。

次のデータセットでは、正の数量が残るまでチェーンの上流に負の数量を適用して、10-19の需要に備える必要があります。

"ID","SKU","DATE","SEASON","QUANTITY"
"1","001","2012-06-22","S12","1656"
"2","001","2012-07-13","F12","1986"
"3","001","2012-07-27","F12","-283"
"4","001","2012-08-17","F12","2718"
"5","001","2012-08-31","F12","-4019"
"6","001","2012-09-14","F12","7212"
"7","001","2012-09-21","F12","782"
"8","001","2012-09-28","F12","2073"
"9","001","2012-10-12","F12","1842"
"10","001","2012-10-19","F12","-12159"

私はこれに到達する必要があります:

"ID","SKU","DATE","SEASON","QUANTITY"
"1","001","2012-06-22","S12","1656"
"2","001","2012-07-13","F12","152"

whileループと外部適用を使用することを検討しましたが、これを行う方法をまだ見つけることができないようです。どんな助けでも大歓迎です。これは、SQL Server2008R2で機能する必要があります。

別の例を次に示します。

"1","002","2012-07-13","S12","1980"
"2","002","2012-08-10","F12","-306"
"3","002","2012-09-07","F12","826"

になります:

"1","002","2012-07-13","S12","1674"
"3","002","2012-09-07","F12","826"
4

2 に答える 2

0

あなたは多くの答えを得ていないようです - それで、あなたが正しい「純粋なSQLでそれを行う方法」を得られない場合は、ここに何かがあります. SQL っぽいものがある場合は、このソリューションを無視してください。これは防御的なコーディングであり、洗練されたものではありません。

重複レコードを削除する同じ季節のすべてのデータの合計を取得する場合は、外部に取得し、foreach ループを実行し、同じ季節の値ですべてのデータを合計し、正しい値でテーブルを更新し、不要なエントリを削除します。これを行う方法の 1 つを次に示します (疑似コード)。

productsArray = SELECT * FROM products
processed = array (associative)
foreach product in productsArray:
  if product[season] not in processed:
    processed[season] = product[quantity]
    UPDATE products SET quantity = processed[season] WHERE id = product[id]
  else:
    processed[season] = processed[season] + product[quantity]
    DELETE FROM products WHERE id = product[id]
于 2012-06-08T00:17:58.940 に答える
0

ここにあるCROSS APPLY- テスト済み

SELECT b.ID,SKU,b.DATE,SEASON,QUANTITY
FROM (
  SELECT SKU,SEASON, SUM(QUANTITY) AS QUANTITY
  FROM T1 
  GROUP BY SKU,SEASON
  ) a
CROSS APPLY (
  SELECT TOP 1 b.ID,b.Date FROM T1 b
  WHERE a.SKU = b.SKU AND a.SEASON = b.SEASON
  ORDER BY b.ID ASC
  ) b
  ORDER BY ID ASC
于 2012-06-08T00:18:42.683 に答える