根据表中的现有列创建一个新列

时间:2018-11-18 21:17:54

标签: sql-server

当您从现有列中添加新列时-您是否必须使用添加列还是可以将其放入?我的orig表没有上一天或下一天-这些是我要添加的列。应该可以吗?

SELECT
ACCT_NUM,
PRODUCT,
Date_local,
CURRENTDAY,
LAG[CURRENTDAY,1,0] OVER(PARTITION BY ACCT_NUM ORDER BY Date_local DESC) AS PREVIOUSDAY,
LEAD[CURRENTDAY,1,0] OVER(PARTITION BY ACCT_NUM ORDER BY Date_local DESC) AS NEXTDAY,
FROM FINANCE.REVENUE03

或者我可以更改表格?

ALTER TABLE REVENUE03
ADD COLUMN PREVIOUSDAY=
    LAG[CURRENTDAY,1,0] OVER(PARTITION BY ACCT_NUM ORDER BY Date_local DESC);
ADD COLUMN NEXTDAY=
    LEAD[CURRENTDAY,1,0] OVER(PARTITION BY ACCT_NUM ORDER BY Date_local DESC)

END

1 个答案:

答案 0 :(得分:1)

简而言之,您不能在其中使用窗口功能,而是创建 VIEW 或尝试创建 FUNCTION 并使用它与计算列。

  

为什么?

原因窗口函数只能出现在SELECT或ORDER BY子句中。

因此,我建议创建一个VIEW之类的

CREATE VIEW YourViewName
AS
SELECT ACCT_NUM,
       PRODUCT,
       Date_local,
       CURRENTDAY,
       LAG[CURRENTDAY,1,0] OVER(PARTITION BY ACCT_NUM ORDER BY Date_local DESC) AS PREVIOUSDAY,
       LEAD[CURRENTDAY,1,0] OVER(PARTITION BY ACCT_NUM ORDER BY Date_local DESC) AS NEXTDAY,
FROM FINANCE.REVENUE03
GO