Yes, through dynamic-sql. It basically means you create a sql-statement by another sql-statement. The new sql-statement will be a 'create table...'-statement which is then executed against the database.
There's usually a better, simpler way though. Perhaps if you could tell us what your'e after we may have an alternative.
dynamic sql example:
you'll have to improve the insert-statement to match the dynamic-table though. Blindman's suggestion might work better for you...
set nocount on
create table t1 (id integer identity(1,1), myColumn varchar(10))
insert into t1 (myColumn) (select 'Col001' union select 'Col002' union select 'Col003' union select 'Col004')
select * from t1
declare @id as integer
, @mysql as varchar(1000)
set @id = (select min(id) from t1)
set @mysql = 'CREATE TABLE T2 ('
while @id <= (select max(id) from t1)
set @mysql = @mysql + (select myColumn from t1 where id = @id) + ' varchar(10), '
set @id = @id + 1
set @mysql = substring(@mysql, 1, len(@mysql) - 1) + ')'
insert into t2 values ('a','b','c','d')
select * from t2