我试图找到一个计算列的公式,它将返回与 ROW_NUMBER()
功能。因为我不能使用 ROW_NUMBER()
函数并将结果保存在表中。我有一张table如下;
ID YEAR
1 2018
2 2018
3 2019
4 2019
5 2020
6 2018
7 2019
我想一个公式,将计算和分配的行数取决于年如下所示;
ID YEAR COMPUTED COLUMN
1 2018 1
2 2018 2
3 2019 1
4 2019 2
5 2020 1
6 2018 3
7 2019 3
3条答案
按热度按时间omhiaaxx1#
我试图找到一个计算列的公式,它将返回与row\ u number()函数相同的结果。
只是不能在计算列中使用窗口函数;窗口函数对一系列行(称为窗口框架)进行操作,而计算列只对它所属的行具有可见性。
我无法使用row\ u number()函数将结果保存到表中
虽然这在技术上是可行的,但我不建议这样做。这是派生的信息,可以随时计算需要。您可以改用视图:
mznpcxlj2#
总有办法解决的。
但这不是个好办法。。。
•这将有一个非常糟糕的表现。如果您的表有超过一百万行—只需在生产中继续浏览,并告诉我们发生了什么;)
pdsfdshx3#
更新:根据op的评论,我有一个新的建议-
从原来的表中创建一个视图,然后给每年的数据
create view original_table_view as select*,row_number()over(partition by[year]order by id)作为原始_table的编号
从视图中创建新表并对新表应用合并
创建新表\u table(id int,[年]int,编号int)
创建合并语法-
因此,如果将来在原始表中插入新值,则只需运行合并查询来更新新表。
查看数据-
旧答案:我把你的查询和计算列而不是计算列混淆了(很抱歉)
不能将函数存储为sql server中的计算列。但是,您可以在表上创建一个视图,然后调用该视图。
示例-
创建如下表
现在使用row\u number()函数创建一个视图(也可以使用rank()和ntile())
现在像下面这样查询这个视图
在此处输入图像描述
如果你说的是计算列-下面的答案是可用的
Dense_Rank()
```select DISTINCT id, [year], DENSE_RANK() over ( order by [year]) as [Dense_rank]
from year_computed
ORDER BY ID