我有一個類別表和一個階段表。每個類別都與一些階段相關聯,每個階段可能有也可能沒有子階段。無法獲得父記錄後按子句排序的子記錄
這是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
)
我想寫的查詢,使我得到類別,舞臺和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
什麼我錯過了連接順序的子句嗎?
如果您'ORDER BY Category.Ordinal,Stages.Name' - 會不會給你你需要的東西? –
是否會有超過1級的兒童階段?如果是這樣,那麼您需要遞歸查詢來構建正確的排序鍵。 – David