如何将一个查询的结果用作另一个查询的选定列?

时间:2017-03-09 11:18:27

标签: sql-server

我有一个表(DataImportTable),其中包含MainDataTable的列名作为其记录 - 请参阅图像: Target Column Table

我想在查询中使用上述列名来从MainDataTable中查找它们。

显然不起作用的查询可以解释我想要实现的目标,可以在下面看到:

select (select TargetColumn from DataImportTable) from MainDataTable

我希望这是有道理的,并且有人可以提供帮助。

提前谢谢!

3 个答案:

答案 0 :(得分:0)

使用动态SQL 来获取其他表格中的列

Select row_number() over( order by TargetColumn ) as RowNumber,TargetColumn into
#temp from DataImportTable where TargetColumn is not null

Declare @Columnslist varchar(max),@i int
set @i = 1
while @i<= (select Count(*) from #temp)
begin
(SELECT @Columnslist = isnull(@Columnslist,'')+'['+(select TargetColumn from #temp 
where RowNumber = @i)+'],')
set @i = @i + 1;
end

SELECT @Columnslist = LEFT(@Columnslist, LEN(@Columnslist) - 1)

Declare @select_cmd varchar(max)
set @select_cmd='select '+@Columnslist +' From MainDataTable'

EXEC(@select_cmd);

answer使其更简单

exec('select '+(select Stuff((select ','+TargetColumn from DataImportTable
for xml path('')),1,1,''))+' From MainDataTable')

答案 1 :(得分:0)

你可以这样做:

declare @query varchar(max);
declare @columns varchar(max);

set @columns = (select TargetColumn + ', ' from DataImportTable for xml path(''));
set @query = 'select ' + left(@columns, len(@columns) -1) + ' from MainDataTable';

exec(@query);

第一个@columns被构造为TargetColumn的值,以逗号分隔(带尾随逗号)。然后,这些列用于构造一个查询(left-thing删除尾随的逗号),然后执行该查询。

答案 2 :(得分:-1)

尝试从MainDataTable中选择(从DataImportTable中选择TargetColumn)作为TargetColumn What's wrong with this MySQL query? SELECT * AS `x`, how to use x again later?