代码之家  ›  专栏  ›  技术社区  ›  shorton

当其他列值更改时的标志列

  •  0
  • shorton  · 技术社区  · 6 年前

    SQL Server 2014。

    我有一个查询有一个名为“sitecode”的字段。我选择数据并按站点代码排序。我需要一个助手列,每当站点代码更改时,其值将从1更改为0。

    如:

    Helper  SiteCode
    1       A
    1       A
    1       A
    0       B
    1       C
    1       C
    0       D
    0       D
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   sticky bit    6 年前

    你可以用 dense_rank() 得到一个连续的数字 sitecode 然后计算模2得到交替的1和0。

    SELECT sitecode,
           dense_rank() OVER (ORDER BY sitecode) % 2 helper
           FROM elbat;
    

    db<>fiddle

        2
  •  3
  •   Gordon Linoff    6 年前

    SQL表表示 无序 套。需要指定排序的列。如果你有,那么 lag() 做你想做的:

    select t.*,
           (case when lag(sitecode) over (order by ?) <> sitecode then 0 else 1 end) as flag
    from t;
    

    这个 ? 用于指定顺序的列。