Sql server 将中的动态值用作SQL Server查询的一部分

Sql server 将中的动态值用作SQL Server查询的一部分,sql-server,Sql Server,我正在进行一个查询(这是一个很长很讨厌的错误),以从SAP系统返回动态更新的值。我已经弄明白了一切,但如何使列标题符合我的要求。它们必须是前11个月和本月的名称(或3个字母的缩写) 目前,我只有 SELECT ... AS [OCT] 对于这个月,但两天后会有所不同,我想让查询在每次运行时自动更新列标题 我发现我可以使用我声明要在函数中使用的变量来获得月份的三个字母名称: DECLARE @last_month DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0,

我正在进行一个查询(这是一个很长很讨厌的错误),以从SAP系统返回动态更新的值。我已经弄明白了一切,但如何使列标题符合我的要求。它们必须是前11个月和本月的名称(或3个字母的缩写)

目前,我只有

SELECT ... AS [OCT] 
对于这个月,但两天后会有所不同,我想让查询在每次运行时自动更新列标题

我发现我可以使用我声明要在函数中使用的变量来获得月份的三个字母名称:

DECLARE @last_month DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 0, 0)
SELECT CONVERT(char(3), @last_month);
返回所选月份。如何使其在“AS”字段中可用

以下是我目前拥有的:

DECLARE @last_two_months DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)
DECLARE @last_month DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 0, 0)
SELECT (a whole mess of things that somehow work) AS [SEPT],
Table.CurrentTotal AS [OCT];

我想将[OCT]替换为在接下来的两天内返回OCT作为列标题,然后在下个月返回NOV,同样地,将[SEPT]更改为在接下来的两天内返回SEP,然后在下个月返回OCT的内容

使用
动态查询

DECLARE @last_month DATE = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 0, 0),
        @alias char(3),
        @sql nvarchar(max)=''

SELECT @alias= CONVERT(char(3), @last_month);

set @sql = 'SELECT ... as ['+@alias+']..'

--Print @sql
exec sp_executesql @sql

使用
Print
语句调试动态查询

对不起,我不太明白您的意思。(我讨厌输入来保存评论)。让我为这个问题补充一些信息。或者,有没有办法将列名作为变量返回?如果有,那么我可以让它工作。