获取数据集作为另一个表的标题

时间:2018-10-11 12:46:31

标签: sql sql-server tsql sql-server-2016

我分别通过API获得了在线数据库中所有调查的列和数据。

第一个示例是前两个调查的列标题

列表

ID  Col1    Col2         Col3
------------------------------------    
0   Name    Birhtdate    Country
1   Time    Name         Address

我第一次调查得到的数据是

数据表

ID  Col1    Col2        Col3
------------------------------------    
0   James   11-11-2011  Japan
1   Tobi    26-02-2014  India

现在,我想合并数据和列,以使列名像是最终表的标题

最终表

ID  Name    Birthday     Country
------------------------------------    
0   James   11-11-20111  Japan
1   Tobi    26-02-2014   India

我使用Select语句所做的所有尝试都给了我

错误的结果表

ID  Col1    Col2         Col3
------------------------------------    
0   Name    Birthdate    Country
1   James   11-11-20111  Japan
2   Tobi    26-02-2014   India

有人可以帮我从数据中获取最终表(视图,临时表...什么)吗?我正在使用SQL Server 2016

2 个答案:

答案 0 :(得分:1)

您可以使用动态SQL定义来自另一个表的列别名:

declare @col1 varchar(50), @col2 varchar(50), @col3 varchar(50)
declare @sql nvarchar(max)

create table #t1  (ID int, Col1 varchar(50), Col2 varchar(50), Col3 varchar(50))
insert into #t1 values   
 (0, 'Name', 'Birhtdate', 'Country')
,(1, 'Time', 'Name'     , 'Address')

create table #t2 (ID int, Col1 varchar(50), Col2 varchar(50), Col3 varchar(50))
insert into #t2 values 
  (0, 'James','2011-11-11', 'Japan')
, (1, 'Tobi' ,'2014-02-26', 'India')

select @col1=col1, @col2=col2, @col3=col3 from #t1 where id = 0

set @sql=concat('select id, col1 as ', @col1, ', col2 as ', 
                @col2, ', col3 as ', @col3, ' from #t2')

exec (@sql)

结果:

enter image description here

答案 1 :(得分:0)

使用纯T-SQL实现这种结果的唯一方法是使用动态SQL。

您可以执行以下操作:

DECLARE @SQL nvarchar(max)

SELECT @SQL = ' SELECT Col1 AS '+ Col1 +', Col2 AS '+ Col2 +', Col3 AS '+ Col3 +
              ' FROM DataTable' 
FROM ColumnsTable
WHERE Id = 0

EXEC (@SQL)