1

私の質問はこれです、

作業中のクエリがあり、いくつかの値が 0 です。前月からゼロではない値を取得し、それをゼロの代わりに配置できるようにしたいと考えています。以下の例を参照してください。

SELECT item,
       stock,
       sold,
       level,
       month,
       year
FROM   agingdata
GROUP  BY item,
          stock,
          sold,
          month,
          year,
          level
HAVING ( item = @Item )
ORDER  BY year,
          month 

ここに画像の説明を入力

だから私は数 2455 を取りたいし、今月の在庫レベルとして先月の残高番号を取って、それが 0 と表示されている在庫に入力します。それは可能ですか?

4

2 に答える 2

1

次のクエリを使用して、アイテムごとに以前のゼロ以外のレベルを見つけることができます (ゼロ レベルのアイテムの場合):

SELECT find.item, find.month, find.year, result.level
FROM AgingData result 
JOIN (
  SELECT original.item, original.month, original.year, max(cast(cast(previous.year as varchar) + '-' + cast(previous.month as varchar) + '-1' as datetime)) previous_date
  FROM AgingData original
  JOIN AgingData previous
    ON original.item = previous.item
     AND ((original.year > previous.year)
         OR (original.year = previous.year AND original.month > previous.month))
  WHERE original.level = 0
    AND previous.level != 0
  GROUP BY original.item, original.month, original.year ) find
ON result.item = find.item
  AND cast(cast(result.year as varchar) + '-' + cast(result.month as varchar) + '-1' as datetime) = find.previous_date

これは、以前のゼロ以外のレベルが数か月前であっても機能します。

于 2012-11-01T19:51:59.043 に答える
0

これらの線に沿った何か、これは前月がゼロ以外の場合にのみ機能します....

SELECT cur.Item, 
       CASE 
            WHEN (cur.Stock<>0) 
            THEN cur.Stock
            ELSE prev.Stock
       END as Stock, 
       cur.Sold, 
       cur.Level, 
       cur.Month, 
       cur.Year 
FROM AgingData cur 
LEFT OUTER JOIN AgingData prev 
     ON prev.item=cur.item and prev.Month = cur.Month - 1
GROUP BY cur.Item, cur.Stock, cur.Sold, cur.Month, cur.Year, cur.Level 
HAVING (cur.Item = @Item) 
ORDER BY cur.Year, cur.Month
于 2012-11-01T19:43:37.293 に答える