Sql 如何找到两个日期之间的总季度数并复制数据n-1次?
我有一个表,看起来像下图,但是还有几个字段(额外的字段基本上是不相关的;尽量保持简单) 我想计算季度数和利息*本金,但问题是…我需要插入与季度数相同的行数,然后从上到下复制所有内容 基本上,由于一些奇怪的报告要求,我需要在13行下面插入12行(总共13行),然后将所有内容都复制下来。然后,在8行下插入7行(总共8行),并将所有内容向下复制。最终结果需要如下所示 我认为SQL将如下所示:Sql 如何找到两个日期之间的总季度数并复制数据n-1次?,sql,sql-server,Sql,Sql Server,我有一个表,看起来像下图,但是还有几个字段(额外的字段基本上是不相关的;尽量保持简单) 我想计算季度数和利息*本金,但问题是…我需要插入与季度数相同的行数,然后从上到下复制所有内容 基本上,由于一些奇怪的报告要求,我需要在13行下面插入12行(总共13行),然后将所有内容都复制下来。然后,在8行下插入7行(总共8行),并将所有内容向下复制。最终结果需要如下所示 我认为SQL将如下所示: Select ID,IssueDate,ExpirationDate,Principal,Interes
Select ID,IssueDate,ExpirationDate,Principal,Interest,
year(ExpirationDate)*4 + ceiling(month(ExpirationDate)/3) - year(IssueDate)*4 - ceiling(month(IssueDate)/3) As Qrts,
(Principal*Interest) AS Calcs
From Reporting_Table
然而,看起来四分之一的硬币有点缩水了。另外,我不知道如何在插入完成后从上到下复制n-1行数据我正在使用SQL Server 2008。
我知道这个结构是非常非规范化的,但是表将非常大,所以选择应该非常快,而且,这将被输入到一个基于web的系统中,这是非常愚蠢的,并且不允许我像上面描述的那样呈现数据,所以我需要在一个基表中完成所有事情。谢谢,专家们。这可以通过使用递归CTE、理货表通过几种方式完成。此解决方案使用
master.dbo.spt\u值作为计数表。我已经更改了列QRT的计算,请检查是否有效
with cte as (
Select
ID,IssueDate,ExpirationDate,Principal,Interest
, Qrts = ceiling((datediff(mm, IssueDate, ExpirationDate)) / 3.0)
, (Principal*Interest) AS Calcs
From
Reporting_Table
)
select
c.*
from
cte c
join master.dbo.spt_values v on c.Qrts > v.number
where
v.type = 'P'
这可以通过使用递归CTE、计数表的几种方式来实现。此解决方案使用master.dbo.spt\u值作为计数表。我已经更改了列QRT的计算,请检查是否有效
with cte as (
Select
ID,IssueDate,ExpirationDate,Principal,Interest
, Qrts = ceiling((datediff(mm, IssueDate, ExpirationDate)) / 3.0)
, (Principal*Interest) AS Calcs
From
Reporting_Table
)
select
c.*
from
cte c
join master.dbo.spt_values v on c.Qrts > v.number
where
v.type = 'P'
对,对,对!!我想这就行了。谢谢我知道这是一个CTE,但我从来都不擅长这些东西。子查询的作用似乎与:with cte…from cte c。我猜所有的魔法都来自于:加入大师…'p'。至少对我来说,这部分在做什么并不明显。你是对的!我使用CTE只是为了让它更容易理解master.dbo.spt_值
将每行乘以Qrts
fieldYes,yes,yes!我想这就行了。谢谢我知道这是一个CTE,但我从来都不擅长这些东西。子查询的作用似乎与:with cte…from cte c。我猜所有的魔法都来自于:加入大师…'p'。至少对我来说,这部分在做什么并不明显。你是对的!我使用CTE只是为了让它更容易理解master.dbo.spt_值
将每行乘以Qrts
字段的值