9

私は毎月の取引日に販売予算を立てています。したがって、1 日目の予算は 300、2 日目の予算は 400、そして今月の予算は 700 です。クエリで次のエラーが発生します。 Incorrect syntax near 'ROWS'.

select 
TradingDate
,Budget
,sum(Budget) over (PARTITION BY TradingDate
order by TradingDate asc
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING),1) AS BudgetMTD
from #4
4

2 に答える 2

2

クエリは、毎日の金額の合計を取得しており、次の金額は同じ日内にあります (パーティションと順序は同じフィールドにあります)。これは許可されていますが、次の 3 つのいずれかを意味します。

  1. TradingDate は日付で、各日付に複数の値があります。その場合、どちらが続くかわからないため、合計は不確定です。
  2. TradingDate は不適切な名前であり、実際には日時です。この場合、同じ日付の次の日時値を取得しています。
  3. クエリの形式が正しくなく、「TradingDate による分割、TradingDate による順序」という意味ではありません。

私はあなたが2つのことのうちの1つを望んでいると推測します. 1 つ目は、1 日の予算と翌日の予算の合計です。もう 1 つは累計です。

1 日に複数の行があり、その日の予算の合計が必要になる可能性があります。その場合は、より単純な定式化を使用できます。

select TradingDate, Budget,
       sum(Budget) over (PARTITION BY TradingDate) AS BudgetMTD
from #4
于 2012-10-31T16:05:26.523 に答える
2

わかりました、サブクエリの解決策を思いつきました:

select TradingDate, Budget,
RunningTotal = (select sum(Budget) from #4 s2
where s2.TradingDate<= s1.TradingDate)
from #4 s1
order by s1.TradingDate
于 2012-11-01T07:37:49.017 に答える