1

長年の潜伏者、初めてのポスター、私は過去数週間この問題を解決しようとしてきましたが、それは私を少しバナナに駆り立てているところまで来ています.

次のようなテーブルがあります。

CREATE TABLE [dbo].[test_tbl](
[Company] [nvarchar](255) NULL,
[src_Amount] [float] NULL,
[src_FullDate] [date] NULL,
[src_ProjectedFromhRate] [decimal](18, 4) NULL,
[project_AgainstRate] [decimal](18, 4) NULL,
[ProjectedDate] [date] NULL,
[ProjectedAmount] [float] NULL) 

テーブルには、次のような情報が表示されます。

INSERT INTO test_tbl VALUES ('Company 1', '2500', '2014-12-31', '0.0010', '-0.0050', '2015-01-31', '2487.50')
INSERT INTO test_tbl VALUES ('Company 1', '2600', '2014-12-31', '0.0020', '-0.0060', '2015-01-31', '2584.40')
INSERT INTO test_tbl VALUES ('Company 1', '2650', '2014-12-31', '0.0030', '-0.0070', '2015-01-31', '2631.45')
INSERT INTO test_tbl VALUES ('Company 2', '2500', '2014-12-31', '0.0010', '-0.0050', '2015-01-31', '2487.50')
INSERT INTO test_tbl VALUES ('Company 2', '2600', '2014-12-31', '0.0020', '-0.0060', '2015-01-31', '2584.40')
INSERT INTO test_tbl VALUES ('Company 2', '2650', '2014-12-31', '0.0030', '-0.0070', '2015-01-31', '2631.45')

再帰 CTE を使用して、2014 年から 2018 年までのすべての日付のテーブルを埋めることができました。つまり、各月 (2015 年から 2018 年) の行があり、他のすべては同じです。私がやろうとしているのは、再帰的な CTE を使用して各日付の金額を計算することです。

前月の ((prevProjecteddateMonth.projectedAmount*project_AgainstRate) + prevProjectedDateMonth.projectedAmount) = 2015 年から 2018 年までの各行の予測金額に基づいて、各月の各 ProjectedAmount を計算したいと考えています。

過去 2 週間のさまざまな CTE を使用して、これまでのところ、その年の 2 月のレートを生成することしかできませんでした。正直なところ、少し頭がおかしくなりました。いくつかの助けを提供できます。

どうもありがとう!

4

2 に答える 2

1

私が見事に誤解していない限り (可能性があります)、CTE はまったく必要ないと思います。

select 
    Company,
    Src_Amount,
    src_ProjectedFromHRate,
    DATEADD(m, n.number, src_fulldate) as ProjectedDate,
    src_Amount * power(1+project_AgainstRate, number) as ProjectedValue
from test_tbl t,
    (Select * from master..spt_values where type='p' and number between 1 and 48) n
于 2013-10-13T09:36:49.373 に答える
0

質問を正しく理解しているかどうかはわかりませんが、ここに私の刺し傷があります: http://sqlfiddle.com/#!3/b8710/2

;with cte as
(
  select [Company]
  ,[src_Amount]
  ,[ProjectedDate] [src_FullDate]
  ,[src_ProjectedFromhRate]
  ,[project_AgainstRate]
  ,cast(DATEADD(d, -1,DATEADD(mm, DATEDIFF(m,0,[ProjectedDate]) + 2, 0)) as date) [ProjectedDate]
  ,[ProjectedAmount] 
  from test_tbl

  union all 

  select c.[Company]
  ,c.[src_Amount]
  ,c.[ProjectedDate]
  ,c.[src_ProjectedFromhRate]
  ,c.[project_AgainstRate]
  ,cast(DATEADD(d, -1,DATEADD(mm, DATEDIFF(m,0,c.[ProjectedDate]) + 2, 0)) as date)
  ,(c.[ProjectedAmount] * c.project_AgainstRate) + c.[ProjectedAmount] 
  from cte c
  where c.ProjectedDate < '2018-12-31'
)
insert test_tbl
select * 
from cte

select src_FullDate, Company, sum(ProjectedAmount) ProjectedAmount
from test_tbl
group by src_FullDate, Company
order by src_FullDate, Company
于 2013-10-13T00:38:33.637 に答える