如何在tsql中找到第n项
我有一个如下表所需
Term
0
8
24
48
80
X
的输出是
Term1 Term2 Diff
0 8 8
8 24 16
24 48 24
48 80 32
80 x 40
我有下面的脚本
Declare @t Table(Term varchar(10))
Insert Into @t
Select '0' Union All
Select '8' Union All
Select '24' Union All
Select '48' Union All
Select '80' Union All
Select 'X'
到目前为止我已经尝试过,因为
;With Cte1 As
(
Select rn = ROW_NUMBER() Over(Order By (select 1)),* From @t
)
,cte2 as(
Select
Term1 = (Select term from Cte1 where rn=1)
,Term2 = (Select term from Cte1 where rn=2)
,Diff = Cast((Select term from Cte1 where rn=2) as int) - Cast((Select term from Cte1 where rn=1) as int)
)
Select * from cte2
我不知道在 cte2 的递归部分要做什么..
需要帮助
I have a table as under
Term
0
8
24
48
80
X
The desired output being
Term1 Term2 Diff
0 8 8
8 24 16
24 48 24
48 80 32
80 x 40
I have the below script
Declare @t Table(Term varchar(10))
Insert Into @t
Select '0' Union All
Select '8' Union All
Select '24' Union All
Select '48' Union All
Select '80' Union All
Select 'X'
So far I have tried as
;With Cte1 As
(
Select rn = ROW_NUMBER() Over(Order By (select 1)),* From @t
)
,cte2 as(
Select
Term1 = (Select term from Cte1 where rn=1)
,Term2 = (Select term from Cte1 where rn=2)
,Diff = Cast((Select term from Cte1 where rn=2) as int) - Cast((Select term from Cte1 where rn=1) as int)
)
Select * from cte2
I donot know what to do in the recursive part of cte2..
Help needed
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不确定为什么
80
和x
之间的差异应该是 40,但您可以通过调整 CTE 以返回最后一行所需的内容来处理这个问题。I'm unsure why the difference between
80
andx
is supposed to be 40, but you can handle that by tweaking the CTE to return what you need for the last row.我建议使用 PIVOT 而不是递归 CTE。参见: http://msdn.microsoft.com/en-us/library/ ms177410.aspx
I recommend using PIVOT and not a recursive CTE. Cf.: http://msdn.microsoft.com/en-us/library/ms177410.aspx