【发布时间】:2020-09-14 23:08:54
【问题描述】:
我有一个表,我想使用窗口函数来填充一些 NULL,但我只希望数据根据表中的 Rank 列向下流动。使用窗口函数(PARTITION BY),所有行都分配相同的数据,这不是这里的要求。
初始表在 Rank=2 和 ID=1 的列 A 和 B 中具有 NULL 值,我想用 Rank=1 的值填充它们。 C 列在 Rank=1 时为 NULL,在 Rank=2 和 ID=1 时为 15,需要保持不变。
这是初始表的结构、所需的输出以及一些示例代码。我不确定如何通过语句将排名合并到分区中 初始表
ID A B C Rank
---------------------------------
1 10 10 NULL 1
1 NULL NULL 15 2
2 10 NULL NULL 1
2 NULL NULL 15 2
2 NULL NULL 15 3
目标表
ID A B C Rank
---------------------------------
1 10 10 NULL 1
1 10 10 15 2
2 10 NULL NULL 1
2 10 NULL 15 2
2 10 NULL 15 3
SQL 查询:
SELECT
ID,
MAX(A) OVER (PARTITION BY ID),
MAX(B) OVER (PARTITION BY ID),
MAX(C) OVER (PARTITION BY ID),
Rank
FROM
TBL;
正如预期的那样,按 ID 和 Rank 进行分区不会导致初始表发生变化
【问题讨论】:
-
通过在 Partition by...(PARTITION BY Id ORDER BY Rank)的括号中包含“ORDER BY”语句似乎有希望的结果,如果这是正确的解决方案,将更新帖子
标签: sql sql-server window-functions