Oder man lässt sich via
SQL die Daten in einer Tabelle zusammenetzen (joinen) und bindet das Ganze ganz einfach nur noch an ein DBGrid.
* Sequenz generieren erste bis letzte Zeile <- min(zeile) bis max(zeile)
* geht die Sequenz durch <- SELECT spalte_x.text, ... FROM sequenz
* und joint für die einzelnen Spalten dann jeweils noch entsprechenden Wert dort rein <- LEFT JOIN tabelle AS spalte_x ON zeile = sequenz AND spalte = x
* kann man sich z.B. bei den vielen Codes für Pivottabellen abgucken