对于 SQL Server 2012,我将如何创建一个 SQL 报告,其中一个列名称更改为另一个 table 的数据列的值?

For SQL Server 2012, how would I create a SQL report where one of the column names is changed to be the value of a data column from another table?

对于 SQL Server 2012,我将如何创建一个 SQL 报告,其中一个列名称更改为另一个 table 的数据列的值?

比如这两个tables.

Location   FirstName   LastName   Menu01

字符串

Location   FieldName   Value

示例数据

1 John Smith Yes
1 Mark Jones No
2 John James

字符串

1 Menu01 AgreeToTerms
2 Menu01 AddToMailingList

我要查询

Select 
    FirstName, LastName, 
    (Location specific name from the String FieldName column) 
From 
    person
Where 
    Location = 1 
Order By 
    LastName

那个returns

FirstName LastName  AgreeToTerms
---------------------------------
Mark      Jones     No
John      Smith     Yes

注意:这不是连接问题(但它可能需要连接或联合?)。所有数据均来自Persontable.

PersonMenu01 需要重命名为 String Value 列的数据 (AgreeToTerms) table.

您需要为此使用动态 SQL

注意以下几点:

  • 使用QUOTENAME转义字段名
  • 检查 sys.columns 列名称是否正确
  • PRINT @sql 会在测试时显示完整的命令,你可以检查它是否正确
  • 如果您有任何数据参数要使用,请将它们传递给 sp_executesql不要 注入它们
DECLARE @location int = 1;

DECLARE @fieldName sysname =
  (
    SELECT s.FieldName
    FROM String s
    JOIN sys.columns c ON c.name = s.FieldName AND c.object_id = OBJECT_ID('person')
    WHERE s.Location = @location
  );

DECLARE @sql nvarchar(max) = N'
Select 
    FirstName, LastName, 
    ' + QUOTENAME(@fieldName) + N'
From 
    person
Order By 
    LastName;
';

PRINT @sql; -- for testing

EXEC sp_executesql
  @sql;