思ったとおりに一致しないのは、@row_number
だと思います。 サブクエリごとに1にリセットされません。
最初の2つ(ProfessorsとDoctors)を結合するだけでテストしましたが、CROSS JOINを使用して、すべてのrow_number値を確認できました。
+------------+--------+------------+----------+
| row_number | name | row_number | name |
+------------+--------+------------+----------+
| 8 | Aamina | 1 | Ashley |
| 8 | Aamina | 2 | Belvet |
| 8 | Aamina | 3 | Britney |
| 8 | Aamina | 4 | Maria |
| 8 | Aamina | 5 | Meera |
| 8 | Aamina | 6 | Naomi |
| 8 | Aamina | 7 | Priyanka |
| 9 | Julia | 1 | Ashley |
| 9 | Julia | 2 | Belvet |
| 9 | Julia | 3 | Britney |
| 9 | Julia | 4 | Maria |
| 9 | Julia | 5 | Meera |
| 9 | Julia | 6 | Naomi |
| 9 | Julia | 7 | Priyanka |
| 10 | Priya | 1 | Ashley |
| 10 | Priya | 2 | Belvet |
| 10 | Priya | 3 | Britney |
| 10 | Priya | 4 | Maria |
| 10 | Priya | 5 | Meera |
| 10 | Priya | 6 | Naomi |
| 10 | Priya | 7 | Priyanka |
+------------+--------+------------+----------+
明らかに行番号が段階的に増加しており、両方のサブクエリの初期値1は、行に番号が付けられるまでにすでに実行されていることがわかります。
各サブクエリで個別のユーザー変数を使用することで、これを修正できる場合があります。
ただし、このクエリは、他の職業のメンバーよりも教授の数が少ない場合など、とにかく希望どおりに機能しません。
正直なところ、SQLではこの種の列形式のフォーマットは行いません。 4つの独立したクエリを実行し、すべての結果をアプリケーションにフェッチして、出力時に列にフォーマットするだけです。そうすれば、はるかに簡単になり、単純なコードは、記述、デバッグ、保守が容易になります。
コメントを再確認してください:
十分に公平なことですが、実際のプロジェクトで過度に巧妙なSQLを実行することが常に最良のアイデアであるとは限らないことをあなた(および他の読者)が知っている限り、コーディングの課題としてこれを行うことは問題ありません。
あなたはコーディングの挑戦をしているので、あなたはそれを自分で解決するべきです、それで私はあなたに以下の出力を生み出す解決策を与えることができません。しかし、これは可能であるという証拠です(出力をモックアップしなかったことを約束します。実際に、ターミナルウィンドウからコピーして貼り付けました)。頑張ってください!
+------------+-----------+--------+-----------+----------+
| row_number | Professor | Doctor | Singer | Actor |
+------------+-----------+--------+-----------+----------+
| 1 | Ashley | Aamina | Christeen | Eve |
| 2 | Belvet | Julia | Jane | Jennifer |
| 3 | Britney | Priya | Jenny | Ketty |
| 4 | Maria | NULL | Kristeen | Samantha |
| 5 | Meera | NULL | NULL | NULL |
| 6 | Naomi | NULL | NULL | NULL |
| 7 | Priyanka | NULL | NULL | NULL |
+------------+-----------+--------+-----------+----------+