Consuming streams for UI views

So, say, I need to generate some reporting screens that are composed of various stream sources, in my case by_category. How do people go about that, do you:

a) project onto different tables from same catch-up subscription and use one checkpoint for that.
     This implies other similiar catch-up subscriptions might write to same tables.

b) read from different streams and maintain separate catch-up checkpoints for a single table / reporting screen.

c) use sql joins and project each stream to a corresponding table.

To me it seems that a) makes it difficult to drop a table and replay onto an enhanced version, because checkpoints might affect other tables. I kind of like b) because it makes it easy to drop and replay, just reset checkpoints for that table, but it does introduce more bookkeeping and multiple (streamId, eventNr) -> table checkpoints. The last, c), kind of defeats one of the benefits with precalculating views, but I am sure it also works fine in many cases.

As you state there are trade offs between them. There is not a "right" answer