Rename columns in 1 table to row values in another

2019-10-19 13:21发布

好了,我在所有2个表:

  • Table 1具有这些3列作为它们只是其不是有意义varchar值:

     Q19243 Q19244 Q19245 
  • Table 2有2列ColumnNameTextValue

ColumnName保持在3列的名称的值Table 1Q19243等),并且还具有被称为对应的列TextValue持有什么友好描述Q19243实际上意味着。

因此,有3条记录在Table 2 ,1表示在每列中Table 1

我想在这些3列重命名Table 1至等于无论是在TextValue列在Table 2 。 我想这样做动态的,而不是一个简单的UPDATE语句来重命名列。 对不起,我没有附上屏幕截图,但我没有看到一个附加按钮,这样做...

如果你运行该代码来创建2个表的一个例子,那么你或许应该有什么,我指的是一个更好的主意。

create table #Table1 (Q19243 varchar(10),Q19244 varchar(10),Q19245 varchar(10))

Create table #Table2 (ColumnName varchar(10),TextValue varchar(50))

Insert into #Table2 select 'Q19243','Provider Name'
Insert into #Table2 select 'Q19244','The Provider You Usually See'
Insert into #Table2 select 'Q19245','How Long Going to Provider'

select * from #Table1
select * from #Table2

drop table #Table1
drop table #Table2

Answer 1:

由于列重命名的目的仅仅是为了输出的目的,你可以使用查询表2对创建特定于表1动态的SQL别名在SELECT列名。

(在下面的示例使用在原来的问题的示例代码和仅由是什么之间不同--==============线)

create table #Table1 (Q19243 varchar(10),Q19244 varchar(10),Q19245 varchar(10))

Create table #Table2 (ColumnName nvarchar(10),TextValue nvarchar(50))

Insert into #Table2 select 'Q19243','Provider Name'
Insert into #Table2 select 'Q19244','The Provider You Usually See'
Insert into #Table2 select 'Q19245','How Long Going to Provider'

select * from #Table1
select * from #Table2

--=========================================
DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = COALESCE(@SQL + N',', N'SELECT')
               + N' t1.'
               + t2.ColumnName
               + N' AS ['
               + t2.TextValue
               + N']'
FROM #Table2 t2

SET @SQL = @SQL + N' FROM #Table1 t1'

SELECT @SQL

EXEC(@SQL)
--=========================================

drop table #Table1
drop table #Table2

@SQLSELECT @SQL=查询:

SELECT t1.Q19243 AS [供应商名称],t1.Q19244 AS [提供者大家平时看到的],t1.Q19245 AS [多长时间去提供商] FROM表1#T1

注意:您所需要的方括号中的字段名称别名(从Table2.TextValue值)有字符串中的空格。



文章来源: Rename columns in 1 table to row values in another table