我分别通过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
答案 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)
结果:
答案 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)