【发布时间】:2020-03-27 09:53:11
【问题描述】:
我有一个基于 PARTITION BY 跨某些列的 ROW NUMBER 视图。 ROW NUMBER 从 0 开始,并根据来自各种文件的 ssis 输入为每条记录递增, 对于每个具有唯一文件名和日期组合的文件,会有从 0 到 n 的行号。
现在我需要创建一个新列,使用行号对值进行计算。
RowNumber Value Filename FileDate
0 500 datax 20200301
1 200 datax 20200301
2 100 datax 20200301
0 600 datax 20200302
1 200 datax 20200302
2 200 datax 20200302
3 100 datax 20200302
4 200 datax 20200302
0 700 datay 20200303
1 500 datay 20200303
我想要一个新列,将每个 RowNumber n 中的值除以 RowNumber 0 中的值,用于其唯一分区
NEWVALUE = (Value @ RowNumber N / Value at RowNumber 0)
RowNumber Value NEWVALUE Filename FileDate
0 500 NULL datax 20200301
1 200 0.400 datax 20200301
2 100 0.200 datax 20200301
0 600 NULL datax 20200302
1 200 0.333 datax 20200302
2 200 0.333 datax 20200302
3 100 0.167 datax 20200302
4 300 0.500 datax 20200302
0 700 NULL datay 20200303
1 500 0.714 datay 20200303
谁知道怎么做
【问题讨论】:
-
“跨一些列” - 哦,天哪,我们猜猜 - 是跨
FileDate吗?我可以猜到ORDER BY是Value降序。尚不清楚Filename是否相关,但如果您只是向我们展示了实际ROW_NUMBER,这一切都会变得容易很多 -
看看
FIRST_VALUE。 -
作为@Larnu,建议您只需要一个窗口函数作为FIrST_VALUE。参考docs.microsoft.com/en-us/sql/t-sql/functions/…
-
@404,OP 不需要分区中的前一个值,而是第一个值。
-
FIRST_VALUE 成功了,谢谢@Gordon。