对于 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
注意:这不是连接问题(但它可能需要连接或联合?)。所有数据均来自Person
table.
Person
列 Menu01
需要重命名为 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;
对于 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
注意:这不是连接问题(但它可能需要连接或联合?)。所有数据均来自Person
table.
Person
列 Menu01
需要重命名为 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;