将一个表中的列重命名为另一个表中的行值



好的,所以我总共有 2 个表:

  • Table 1有这 3 列没有意义,因为它们只是一个varchar值:

    Q19243  Q19244  Q19245
    
  • Table 2有 2 列ColumnNameTextValue

ColumnName保存Table 1中 3 列名称的值(Q19243等),并且还有一个名为TextValue的相应列,其中包含对Q19243实际含义的友好描述。

所以Table 2有3条记录,Table 1每列1条。

我想重命名这 3 列Table 1以等于Table 2TextValue列中的任何内容。我想动态执行此操作,而不是使用简单的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

由于列重命名的目的仅用于输出目的,因此可以使用针对 Table2 的查询来创建特定于 Table1 的动态 SQL,该 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

SELECT @SQL=查询后@SQL的值为:

选择 t1。Q19243 AS [提供程序名称],t1。Q19244 AS [提供者您 通常见],t1。Q19245 AS [需要多长时间到提供商] 从 #Table1 T1

注意:您需要字段名称别名(来自 Table2.TextValue 的值)两边的方括号,因为字符串中有空格。

最新更新