2017-01-20 6 views
1

私は以下のロジックのための助けが必要です、私は私の終わりを試みたが、この問題を解決することができませんでした。 私の入力テーブルは以下の通り:ヶ月間は、現在のdate.Outputに基づいて増加しますので、私は以下のように値を計算する必要があり、それが動的な意志行間の合計を計算する必要があります

Months Amount 
Dec-15  720030 
Jan-16  763236 
Feb-16  795555 
Mar-16  829252 
Apr-16  856052 

LAG()使用
+---------------------------------------------------------+ 
| Months  Amount  Formula   Expected Amount | 
+---------------------------------------------------------+ 
| 15-Dec  720030  Dec-15   720030   | 
| 16-Jan  763236  Dec-15+Jan-16 1483266   | 
| 16-Feb  795555  Jan-16+Feb-16 1558791   | 
| 16-Mar  829252  Feb-16+Mar-16 1624807   | 
| 16-Apr  856052  Mar-16+Apr-16 1685304   | 
+---------------------------------------------------------+ 
+1

希望の出力は何ですか? –

+1

希望の出力を記載してください –

+2

どのバージョンのSQL Serverですか? 2012年以降は 'LEAD'または' LAG'関数を使用することができます –

答えて

0

SELECT Months, Amount, 
     CONVERT(varchar, MONTHS, 101) +  -- replace 101 with correct format mask 
     CASE WHEN CONVERT(varchar, LAG(Months , '') OVER (ORDER BY Months), 101) <> '' 
      THEN ' + ' + CONVERT(varchar, LAG(Months, '') OVER (ORDER BY Months), 101) 
      ELSE '' END AS Formula, 
     Amount + LAG (Amount, 0) OVER (ORDER BY Months) AS [Expected Amount] 
FROM yourTable 
+0

あなたは@ Nitin.Gawadeが何を表示したいのか、あなたの質問が何を提供しているのか観察しましたか? –

+0

私たちは列の種類や実際のデータがわからないため、その答えはわかりません。 –

+0

あなたは適切なデータと要件なしであなたの答えを投稿しました - :) –

0

私は最初に追加の列 'ID'を持つ一時テーブルを作成しました。 IDはROW_NUMBER()関数を使用して作成されます。次に、whileループを使用して、テーブルを横断して、現在の金額の前の金額を加算しています。

コードは以下のとおりです。

select month, amount, ROW_NUMBER() over(order by month) ID 
into New_Table from Your_Table 

declare @a int 
set @a = 1; 
    while @a <= (select max(ID) from New_Table) 
     begin 
      IF @a = 1 
      select month, amount, amount Expected_Amount from New_Table where ID = @a; 
      ELSE 
      select month, amount, amount + (select amount from New_Table where ID = (@a-1)) Expected_Amount from New_Table where ID = @a; 
set @a = @a + 1; 
end; 
関連する問題