カテゴリ テーブルとステージ テーブルがあります。各カテゴリはいくつかのステージに関連付けられており、各ステージには子ステージがある場合とない場合があります。
SQL スキーマは次のようになります。
CREATE TABLE Category
(
Id BIGINT,
Name VARCHAR(100),
Ordinal BIGINT
)
CREATE TABLE Stages
(
Id BIGINT,
Name VARCHAR(100),
CategoryId BIGINT,
ParentStage BIGINT,
Ordinal BIGINT
)
Category、Stage、および ChildStages を正しい順序で取得できるように、クエリを作成しようとしています。
これは私が取得しようとしているものです:
Category Stage
-----------------------------
Cat1 Cat1Stage1
Cat1 Cat1Stage2
Cat1 Cat1Stage3
Cat1 Cat1Stage3ChildStage1
Cat1 Cat1Stage3ChildStage2
Cat1 Cat1Stage3ChildStage3
Cat1 Cat1Stage4
Cat1 Cat1Stage5
Cat2 Cat2Stage1
Cat2 Cat2Stage2
Cat2 Cat2Stage3
Cat2 Cat2Stage3ChildStage1
Cat2 Cat2Stage3ChildStage2
Cat2 Cat2Stage3ChildStage3
Cat2 Cat2Stage4
Cat2 Cat2Stage5
これは私が書いたクエリであり、その順序で結果が得られません:
SELECT Category.Name 'Category Name',
Stages.Name 'Stage Name'
FROM Category
LEFT JOIN Stages
ON Category.Id = Stages.CategoryId
ORDER BY Category.Ordinal,
CASE WHEN ParentStage IS NULL THEN Stages.Ordinal ELSE ParentStage END
http://sqlfiddle.com/#!3/d8c2d
join order by 句に欠けているものは何ですか?