0

私はこの論理的な問題で立ち往生しており、どうすればよいかわかりません。

ID と FOLDERID の 2 つの列があります。フォルダーもサブフォルダーになる可能性があるため、最初にフォルダー ID (ルートフォルダー) を持たないフォルダーを選択し、次にそれらのサブフォルダーを選択して、結果を並べ替えたいと思います。こうすれば、「フォルダXが存在しない」などの問題は発生しません。

この例では、FOLDERID ASC および/または ID ASC による単純な順序付けでは、必要なものを取得できません。

正しい結果は 3 番目の結果です。

  1. 最初に、ID 2 の "Teste" フォルダーを取得します。これは、フォルダー ID 0 = ルート 1 であるためです。
  2. フォルダーIDが2であるため、「Controladoria」フォルダーが必要なため、最初にフォルダーID 2を作成する必要があります(Teste)
  3. ID 1 のフォルダーが必要な「PCP」フォルダー (Controladoria)
  4. ID 3 (PCP) のフォルダーが必要な「Pasta1」フォルダー
  5. 延々と...

同じテーブルで複数の ORDER BY と JOIN/LEFT JOIN を使用していくつかの方法を試しましたが、これを行う方法がわかりません。

何か案は?

4

4 に答える 4

2

CASEあなたの例ではステートメントを使用できますがORDER、これは機能しますが、RDBMS によって構文が異なる再帰的階層の後にあるように思えます。

ORDER BY CASE WHEN FolderID = 0 THEN 0 ELSE 1 END, ID
于 2013-07-31T15:46:28.893 に答える