2016-10-04 12 views
-2

以下のように、最大​​50行のテーブルがあります。Sql行を特定の形式に整列する方法

ID menu dispOdr ParntID 
--------------------- 
1 abc 1  0 
2 cde 2  0 
3 fgh 1  2 
4 ghdfdj 2  2 
5 tetss 1  1 
6 uni 3  0 

が、私は、任意のクエリを持っている場合は、私は..事前に感謝を教えてください

ID menu dispOdr ParntID 
--------------------- 
1 abc 1  0 
5 tetss 1  1 
2 cde 2  0 
3 fgh 1  2 
4 ghdfdj 2  2 
6 uni 3  0 

同様

をソートすることにしたいです。私は、SQL Serverに2014

+7

所望の順序のためのロジックは何ですか? –

+0

yesオーダーメイドby asc。 –

+3

どの言語で 't'が 'c'の前にありますか? – Strawberry

答えて

0

を使用しています

は、私は、クエリは、以下の必要な出力を生成することを考える:

SELECT t1.ID, t1.menu, t1.dispOdr, t1.ParntID 
FROM mytable AS t1 
LEFT JOIN mytable AS t2 ON t1.ParntID = t2.ID 
ORDER BY CASE 
      WHEN t1.ParntID = 0 THEN t1.dispOdr 
      ELSE t2.dispOdr 
     END, 
     CASE 
      WHEN t1.ParntID = 0 THEN 1 
      ELSE 2 
     END, 
     t1.dispOdr 

最初CASE表現グループのレコードを親のdispOdrによります。 2番目のCASEは、そのサブグループの最上位に親を置きます。最後に、ORDER BY句で使用されている最後の式は、サブグループ内のすべての子レコードを順序付けします。

注:上記のクエリは、1つのレベルの入れ子で動作します。

+0

ありがとうございました。:) –

1

あなたの現在の出力と希望の出力を逆にする必要があると思います。あなたは、メニューの列をソートしたいと言うが、それはすでにあるようだ。

だから、あなたは単に、ORDER BYを使用してメニュー列を並べ替えることができますが、実際には第二のテーブルで開始していると仮定すると:

SELECT * 
FROM mytable 
ORDER BY menu ASC 
関連する問題