如何获取另一列

时间:2017-04-02 11:52:36

标签: sql sql-server tsql ssms

我有一个名为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)

3 个答案:

答案 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)