複雑なCASE
ステートメントを階層データセットに書き込もうとしています。複雑なHieraechical Traversing inside CaseステートメントT-SQL
これは、サンプルデータを持つテーブルである:
Level Parent Child IsDirector
----------------------------------------
0 NULL SteveJobs NO
1 SteveJobs TimCook YES
2 TimCook Greg NO
3 Greg Mark NO
4 Mark Jack NO
4 Mark Kim NO
4 Mark Tyler NO
4 Mark Emma NO
私は人のディレクターを見つけるために、SQLクエリを記述しようとしています。私が金さんに問い合わせると、結果はこうなるはずです。
Parent Child Director
-------------------------
Mark Kim TimCook
ここに私が書いた質問があります。
SELECT
A.Parent, A.Child,
CASE A.IsDirector
WHEN 'YES'
THEN A.Child
WHEN 'NO'
THEN CASE
WHEN (A.IsDirector = 'NO' AND A.Parent IS NOT NULL)
THEN A.Parent
ELSE (SELECT
CASE WHEN B.IsDirector = 'YES'
THEN B.Parent
END AS Director
FROM @Org B
WHERE B.Child = A.Parent)
END
END AS Director,
A.IsDirector
FROM
@Org A
WHERE
Child = 'Kim'
結果は以下
Parent Child Director IsDirector
------------------------------------
Mark Kim Mark NO
SQLフィドルです。申し訳ありませんが、上記のコードをどのようにフォーマットするのか分かりません。
http://sqlfiddle.com/#!6/b5830
だから、dアイレクターは常に親の上のレコードですか?より良い質問:「ディレクター」を決定するもの – xQbert
誰でもディレクターになることができますが、ディレクターは常に親を持たない親の子になります。私が提供した上記の表では、レベル1として別のレコードが存在する可能性があります。簡単な答え:レベル1は常にディレクターになり、レベル0には親が決してありません。これがあなたの質問に答えるかどうか私に教えてください。 –