Przypuszczam, że powodem, dla którego nie pasuje tak, jak uważasz, że powinien, jest to, że @row_number
nie resetuje się do 1 dla każdego podzapytania.
Przetestowałem to, po prostu dołączając do pierwszych dwóch (profesorów i lekarzy), ale używając CROSS JOIN, więc mogłem zobaczyć wszystkie wartości 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 |
+------------+--------+------------+----------+
Widać, że najwyraźniej numery wierszy są zwiększane progresywnie, a początkowa wartość 1 w obu podzapytaniach została już wykonana do czasu numerowania wierszy.
Możesz to naprawić, używając odrębnej zmiennej użytkownika w każdym podzapytaniu.
Ale to zapytanie i tak nie zadziała tak, jak chcesz, na przykład, jeśli masz mniej profesorów niż członków innych profesji.
Szczerze mówiąc, nie zrobiłbym tego rodzaju formatowania kolumnowego w SQL. Po prostu wykonaj cztery niezależne zapytania, pobierz wszystkie wyniki do swojej aplikacji i sformatuj je w kolumny podczas wyprowadzania. W ten sposób będzie to znacznie prostsze, a prosty kod będzie łatwiejszy do napisania, łatwiejszy do debugowania i łatwiejszy w utrzymaniu.
Odpowiedz na swój komentarz:
W porządku, zrobienie tego jako wyzwanie kodowania jest w porządku, o ile Ty (i inni czytelnicy) wiesz, że w prawdziwym projekcie wykonanie nadmiernie sprytnego SQL nie zawsze jest najlepszym pomysłem.
Ponieważ zajmujesz się kodowaniem, powinieneś sam je rozwiązać, więc nie mogę podać rozwiązania, które da wynik poniżej. Ale to dowód na to, że jest to możliwe (obiecuję, że nie wymyśliłem danych wyjściowych, naprawdę skopiowałem i wkleiłem je z okna mojego terminala). Powodzenia!
+------------+-----------+--------+-----------+----------+
| 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 |
+------------+-----------+--------+-----------+----------+