The issue is that Dataview generally looks at your data at the page level, not the section level. So it doesn’t know that the first “State” is supposed to go with the first “Project”. All it sees is a single page that has four values for “Project”, four values for “State”, and so forth.
I recommend breaking up this data into four pages, each with its own State and Upload fields. If you did that, then you could query the pages with something like:
SELECT State, Upload
… and you would see a table that looks more like what you expect.
The WHERE State clause is to filter the list to show only pages that have a State field defined. You could also add a FROM to narrow the search to a particular directory or tag.