查询以给出数据行中最接近的值

问题描述 投票:0回答:1

我有一个表格,其中列如下所示

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
方法,但它与以下值相同的数字混淆。 请帮忙

sql sql-server hierarchy
1个回答
0
投票

你可以这样做:

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。

© www.soinside.com 2019 - 2024. All rights reserved.