我有一个名为Opp Table的表
OppID actualclosedate
--------------------------------------
1 10-March
我有一个名为stagechange的表
--------------------------------------
OppID Stage createdon
--------------------------------------
1 Propsect 1-Jan
1 Qualify 15-Jan
1 Develop 25-Jan
1 Qualify 9-Feb
1 Develop 7-March
1 Prospect 9-April
如何创建新列并获取createdon列中的下一行值;有类似的东西。如果没有更多的下一个值,我们从其他表中获取日期,例如Opp Table中的实际关闭日期
--------------------------------------
OppID Stage createdon newcolumn
--------------------------------------
1 Propsect 1-Jan 15-Jan
1 Qualify 15-Jan 25-Jan
1 Develop 25-Jan 9-Feb
1 Qualify 9-Feb 7-March
1 Develop 7-March 9-April
1 Prospect 9-April 10-March ----(actualclosedate)
答案 0 :(得分:1)
假设createdOn
存储为有效的日期/时间类型,并且 next 表示此列的下一个,则只需使用lead()
:
select sc.*,
lead(createdOn) over (partition by OppId order by createdOn) as next_created_on
from stagechange sc;
这假定(虽然未在问题中明确说明)您希望下一个日期每OppId
。
lead()
是大多数但不是所有数据库都可用的ANSI标准函数。
答案 1 :(得分:0)
这将使用actualclosedate
Select A.*
,NewColumn = IsNull(Lead(creaton) over (Partition By A.OppID Order By A.CreateOn),B.actualclosedate)
From stagechange A
Join Opp B on A.OppID=B.OppID
答案 2 :(得分:0)
您可以使用COALESCE函数https://msdn.microsoft.com/fr-fr/library/ms190349.aspx