If you were using document types, this would be a piece of cake but since you are using custom tables it proves to be a bit more challenging as you need to get creative in how you create your links an get your "selected" values as a custom table item doesn't have a DocumentID field (unless you create one) and you can't use the built-in GetDocumentUrl() method because it's not a document type and isn't anywhere in a tree node. So try this and see how it works.
1). On your main case study page where you have a list of case studies add a URL alias to the page properties called {CaseStudy}. If you're URL is <root>/Case-Studies.aspx then you're alias would look like this /Case-Studies/{CaseStudy}.
2). Then in the item (and alternating item) transformation for the list, create the link to view the details.
<a href="/Case-Studies/<%# Convert.ToString(Eval("CaseStudyID")) %>.aspx"><%# Eval("CaseStudyName") %></a>
This should create something like /Case-Studies/293.aspx when rendered. Your field names may vary from what I have entered.
3). Then place another custom table repeater on the same page and set 2 important properties:
Visibility: set to this macro:
{% if (QueryString.GetValue("CaseStudy") != null) {true}else{false} @%}
WhereClause: set to this macro:
CaseStudyID = {%CaseStudy%}
On your initial custom table repeater that displays the list you will need to modify the repeaters visibility to return the opposite of the "selected case study" repeaters visibility so it doesn't so the list while you are looking at a selected case study.
{% if (QueryString.GetValue("CaseStudy") != null) {false}else{true} @%}
Good luck!