Предполагам, че причината да не съвпада по начина, по който смятате, че трябва е, че @row_number
не се нулира на 1 за всяка подзаявка.
Тествах го, като просто съединих първите двама (професори и доктори), но използвах 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. Просто направете четири независими заявки, изтеглете всички резултати във вашето приложение и форматирайте в колони, докато извеждате. По този начин ще бъде много по-просто и простият код е по-лесен за писане, по-лесен за отстраняване на грешки, по-лесен за поддръжка.
Re your comment:
Честно казано, правенето на това като предизвикателство за програмиране е добре, стига вие (и другите читатели) да знаете, че в реален проект, правенето на прекалено умен 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 |
+------------+-----------+--------+-----------+----------+