sql >> データベース >  >> RDS >> Sqlserver

階層の最上位の親を取得する SQL Server 関数

    top から childs への再帰 cte の場合:

    with cte as(
      select *, code as ultimate from t where code = under
      union all
      select t.*, c.ultimate from t
      join cte c on c.code = t.under
      where t.code <> t.under
    )
    select * from cte
    

    データの場合:

    create table t (code int, name varchar(100), under int)
    insert into t values
    (1, 'National Sales Manager', 1),
    (2, 'regional sales manager', 1),
    (3, 'area sales manager', 2),
    (4, 'sales manager', 3),
    (5, 'a', 5),
    (6, 'b', 5),
    (7, 'c', 5),
    (8, 'd', 7),
    (9, 'e', 7),
    (10, 'f', 9),
    (11, 'g', 9)
    

    出力を生成します:

    code    name                    under   ultimate
    1       National Sales Manager  1       1
    5       a                       5       5
    6       b                       5       5
    7       c                       5       5
    8       d                       7       5
    9       e                       7       5
    10      f                       9       5
    11      g                       9       5
    2       regional sales manager  1       1
    3       area sales manager      2       1
    4       sales manager           3       1
    

    フィドル http://sqlfiddle.com/#!6/17c12e/1



    1. 配列をoracleプロシージャに渡します

    2. SQL Server Compact EditionでASP.NETメンバーシップを使用できますか?

    3. JSONデータをMYSQLに挿入する最良の方法

    4. SQL Serverで「datetime2」を「smalldatetime」に変換します(T-SQLの例)