我有SELECT
声明:
SELECT
ProjectId,
ProjectName,
D3 as "three month ago",
D2 as "two month ago",
D1 as "last month",
F0 as "current month",
F1 as "next month",
F2 as "next two month",
FROM
View_Year_Forcast
我想根据当前月份指定列名。
我有一个函数get_month_name
,它获取月份符号,如(d1,d2,d3,f0 ..),并返回一个字符串,表示希伯来语中的月份名称。
解决问题的最佳方法是什么?
只是为了记录我试图在SQL Server的存储过程中执行此操作
答案 0 :(得分:1)
可以使用动态SQL执行此操作:
declare @month nvarchar(50)
declare @sql nvarchar(1000)
set @month = 'March' -- execute your `get_month_name` function here instead
set @sql = 'select D3 as ' + @month + ' from View_Year_Forcast'
exec sp_executesql @sql
但是,动态SQL存在问题。有关详细说明,请参阅The Curse and Blessings of Dynamic SQL。
因此,如果它在某种程度上可行,我宁愿不使用动态SQL,而是执行marc_s suggested in his comment之类的事情:
保持查询不变,另外返回月份名称,让客户在正确的位置显示月份名称。