Maybe the OP should be reconsidering why he has to create a temp table for a user report? I'm assuming this because if the performance if the query.
Don't know how many users there are, but opening up the possibility of users creating and dropping tables on the fly can't be best practice.
Possibly need to look into some fancy SQL. Google the "with" clause. You add it at the beginning if your select.
With mywithclause as (select col1, col2 from table1 where table1.col3='something'),
anothermywithclause as (select col1, col2 from table2 where table2.col4 ='somethingelse')
Select table9.col1, table9.col2, a.col1 a1, b.col2 b2
From table9, mywithclause a, anothermywithclause b
Where table9.col7 = a.col1
And table9.col9 = b.col2;
In other words, the bits before your main select replace your temp table. This example shows how you can use 2 of the them. Note that you can join to the first one in the second. Note how you reference them in the main select joins. Obviously the joins in each with clause can have the same complex joins as any select.
This is an oracle example, but with clause is SQL-99 compliant and I'm sure recent SQL server versions can do this, with a few tweaks.
Another option, which is often used in Oracle, are inline views, I'm not sure if SQL server can do them.