Sql server 基于表中现有列创建新列

Sql server 基于表中现有列创建新列,sql-server,Sql Server,当您从现有列添加新列时,您必须使用add column还是直接将其放入?我的原始表没有前一天或第二天-这些是我要添加的列。这样行吗 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_N

当您从现有列添加新列时,您必须使用add column还是直接将其放入?我的原始表没有前一天或第二天-这些是我要添加的列。这样行吗

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

简单地说,您不能在那里使用窗口函数,而是创建一个,或者尝试创建一个,并将其与计算列一起使用

为什么?

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

因此,我建议创建一个
视图

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

这并不是一件好事,Windows函数只能出现在SELECT或ORDERBY子句中。我建议你改用
视图
。@Sami我用alter table编辑怎么样?行吗?我是新来的!我不知道这对我意味着什么,我只是在创建一个列——这就是创建列的方式。为什么您需要Order by?难道您不能创建一个
视图
甚至一个
函数
,而不是在计算列中使用一个窗口函数,这是不可能的吗?您能给我举个例子吗?我问的其他问题已经指示我以这种确切的方式添加内容,所以我不明白为什么这不起作用,谢谢。我已经有其他人在这里说,你可以从更新表或改变表开始-不是这样吗?每次更改都必须创建这样的新视图吗?您只需选择您的表并可以进行更新—您不认为必须创建新表view@newbie不,您不能在那里使用窗口功能,对于视图,您只需创建一次,然后从中选择。如果已经有表1,您不能选择*表1;更改表1…等。如果表存在,为什么我必须创建一个视图——我查询它,然后修改它