SQL Server 2014动态列名实现:用视图表头替换数据列名
需求:动态替换SQL查询结果列名
需要将第一个视图中的数据,以第二个视图返回的内容作为列名进行查询展示,运行环境为SQL Server 2014。
1. 数据来源视图(Rpt_Planning_PP_Screen)
查询语句
select Product, _2nd_Future_Month, _3rd_Future_Month, _4th_Future_Month from Rpt_Planning_PP_Screen
视图返回数据
Product _2nd_Future_Month _3rd_Future_Month _4th_Future_Month Voren 25mg Tablets 4166 8332 4166 Voren 50mg Tablets 117648 127452 117648 Cardiolite 25mg Tablets 5000 10000 5000
2. 表头来源视图(Rpt_Planning_PP_Screen_Heading)
查询语句
select Product, _2nd_Future_Month, _3rd_Future_Month, _4th_Future_Month from Rpt_Planning_PP_Screen_Heading
视图返回数据
Product _2nd_Future_Month _3rd_Future_Month _4th_Future_Month Product Nov_2023 Dec_2023 Jan_2024
期望输出结果
Product Nov_2023 Dec_2023 Jan_2024 Voren 25mg Tablets 4166 8332 4166 Voren 50mg Tablets 117648 127452 117648 Cardiolite 25mg Tablets 5000 10000 5000
实现脚本(SQL Server 2014)
由于SQL Server无法直接静态替换列名,需用动态SQL实现:
DECLARE @sql NVARCHAR(MAX) DECLARE @col2 NVARCHAR(50), @col3 NVARCHAR(50), @col4 NVARCHAR(50) -- 从表头视图提取目标列名 SELECT @col2 = _2nd_Future_Month, @col3 = _3rd_Future_Month, @col4 = _4th_Future_Month FROM Rpt_Planning_PP_Screen_Heading WHERE Product = 'Product' -- 构建动态SQL语句 SET @sql = N' SELECT Product, _2nd_Future_Month AS ' + QUOTENAME(@col2) + ', _3rd_Future_Month AS ' + QUOTENAME(@col3) + ', _4th_Future_Month AS ' + QUOTENAME(@col4) + ' FROM Rpt_Planning_PP_Screen' -- 执行动态SQL EXEC sp_executesql @sql
说明
- 先从表头视图提取要替换的列名,存入变量;
- 用
QUOTENAME处理列名,避免特殊字符或关键字引发语法错误; - 拼接动态SQL,将原列名替换为提取到的表头名称;
- 通过
sp_executesql执行动态SQL,得到预期结果。
内容的提问来源于stack exchange,提问作者Mumhammad Mumtaz Ali
相关产品推荐
相关产品推荐

