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

ツリー階層を取得するためのCTE再帰

    これを試してください:

    ;WITH items AS (
        SELECT EstimateItemID, ItemType
        , 0 AS Level
        , CAST(EstimateItemID AS VARCHAR(255)) AS Path
        FROM EstimateItem 
        WHERE ParentEstimateItemID IS NULL AND EstimateID = @EstimateID
    
        UNION ALL
    
        SELECT i.EstimateItemID, i.ItemType
        , Level + 1
        , CAST(Path + '.' + CAST(i.EstimateItemID AS VARCHAR(255)) AS VARCHAR(255))
        FROM EstimateItem i
        INNER JOIN items itms ON itms.EstimateItemID = i.ParentEstimateItemID
    )
    
    SELECT * FROM items ORDER BY Path
    

    Pathを使用 -親ノードでソートされた行

    子ノードをItemTypeで並べ替える場合 レベルごとに、Levelでプレイできるよりも およびSUBSTRING Pathの 列....

    ここにデータのサンプルを含むSQLFiddle



    1. XAMPPでMariaDBをMySQLに変更するにはどうすればよいですか?

    2. 動的SQLの結果を変数に割り当てます

    3. Django + Postgres:現在のトランザクションは中止され、トランザクションブロックが終了するまでコマンドは無視されます

    4. 次のSELECT式で列エイリアスを使用できないのはなぜですか?