Create (or use if you already have one) a table with one record per student linked to your table of test results. Set up a list view layout based on that students table and use a series of one row portals each with a filter that filters to a specific assessment category to get your columns of test results. If a student is tested repeatedly on different dates, you can add a global field to students and filter all your portals by both asessment category and also by date.
Set up your self join relationship matching by a student ID. Set up a list view layout based on the test results table and make each row a sub summary layout part "when sorted by" the student ID. Then the same set up of one row filtered portals can be used for the columns of test results. With this option, if you test your students repeatedly, you can perform a find for a date or range of dates to limit the records shown, but then you still need to filter your portals by the same date or date range in order to match to the correct records. (you may be able to include the test date as part of the self join).
What you see on your table will look much the same in either case.