我有一个表格,其中列如下所示
Column B
包含数字,我希望下一列基于 Parent
中的数据反映
Column B
的
Column B
关系
A 栏 | B 栏 | (预期或计算字段)父级 |
---|---|---|
abc | 1 | 空 |
定义 | 2 | 1 |
吉尔 | 3 | 2 |
jklo | 4 | 3 |
姆诺克 | 5 | 4 |
pqrt | 5 | 4 |
stuv | 5 | 4 |
我尝试了
Lag
方法,但它与以下值相同的数字混淆。
请帮忙
你可以这样做:
select *
, max(prev) over(order by [column b], [column a]) as parent
from (
select *, case when lag([column b]) over(order by [column b], [column a]) <> [Column B] then lag([column b]) over(order by [column b], [column a]) end as prev
from (
VALUES (N'abc', 1, Null)
, (N'def', 2, N'1')
, (N'ghil', 3, N'2')
, (N'jklo', 4, N'3')
, (N'mnok', 5, N'4')
, (N'pqrt', 5, N'4')
, (N'stuv', 5, N'4')
) t ([Column A],[Column B],[(Expected or Calculated Field) Parent])
) x
您将获得上一行,如果它与当前行不同,请选择该行,否则为 NULL。然后在下一次迭代中,您将取前几行的最大值。这将过滤掉 NULL。