-1

更新:結果が実行方法のように見えないため、質問しました...ここで説明されています:http: //msdn.microsoft.com/en-us/library/ms186243( v = sql.105)。 aspx

別の質問があります...同じ親とレベルが必要ない場合、CTE(その後の選択ではない)または他のSQLを使用して1つの親を1回だけ返すことは可能ですか?

===========================望ましい結果は次のようになります。

......
    54          4           
    **** the above is anchor member, the numbers are correct  
    4           1          
    1           0           
    2           1           
    36          35          
    35          8           
    8           1           
    54          12          
    12          1           
    11          1           
    3           1           

===========================

再帰クエリを使用して、Itemsテーブルのアイテムについて、階層テーブルからすべての親を検索しています。結果はレベルごとである必要があると思いましたが、そうではありません...順序を使用して並べ替えることができます。再帰メンバーはレベルごとに実行されるため、出力自体はレベルごとに並べ替える必要があると思います。

            WITH Result(ItemID, ParentID, Level)
            AS
            (
                --get the anchor member from tbItems
                SELECT itemID, itemParentID, 0 AS Level
                FROM   tbItems  WHERE
                    approved = 0 
                UNION ALL
                --recursive member from tbHierarchy
                SELECT h.hierarchyItemID, h.parentItemID, Level + 1
                FROM tbHierarchy AS h
                INNER JOIN
                    Result AS r
                        ON
                        h.hierarchyItemID = r.ParentID          

            )
            SELECT *
            FROM Result

結果は次のとおりです。

    ItemID      ParentID    Level
    ----------- ----------- -----------
    7           3           0
    11          2           0
    18          11          0
    19          11          0
    21          54          0
    31          2           0
    33          36          0
    34          36          0
    35          36          0
    36          36          0
    38          2           0
    39          2           0
    40          2           0
    54          4           0
    **** the above is anchor member, the numbers are correct  
    4           1           1
    1           0           2
    2           1           1
    1           0           2
    2           1           1
    1           0           2
    2           1           1
    1           0           2
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    36          35          1
    35          8           2
    8           1           3
    1           0           4
    2           1           1
    1           0           2
    54          12          1
    12          1           2
    1           0           3
    11          1           1
    1           0           2
    11          1           1
    1           0           2
    2           1           1
    1           0           2
    3           1           1
    1           0           2
4

1 に答える 1

2

データベース内のデータは順序付けられていません。を入れorder byないと、出力の順番がわかりません。

データベースがあなたが思っているように物事を行うとは決して思わないでください。90%の確率で、それは間違っています。データベースの目的は、クエリを理解し、解決策を見つけるための最速の方法を見つけることですが、それは多くの場合、あなたが考える方法ではありません。

編集者によっては、解決策を見つけるために使用した計画を説明するように依頼できる場合もありますが、結果がどのように得られるかについての説明が得られる場合があります。

于 2012-07-25T15:11:05.320 に答える