计算日期作为列名SQL Server 2008



这里有许多关于将列命名为变量的问题,我不认为这是这些问题的重复,因为我想使用计算。

我想用前一个月的名字来命名我的专栏。我希望这能工作:

SELECT isnull(sum(CASE when datepart(mm,rc.datetime) = DATEPART(MONTH, GETDATE()) -1 then 1 else null end),0) AS datename(MM, dateadd(MM, -1, getdate()))

或为了可读性:

... AS datename(MM, dateadd(MM, -1, getdate()))

但是它没有,我得到一个不正确的语法错误。这是可以实现的吗?

尝试使用动态sql,

DECLARE @sql NVARCHAR(max) = ''
SET @sql = 'SELECT isnull(sum(CASE 
                WHEN datepart(mm, rc.DATETIME) = ' + convert(VARCHAR(10), DATEPART(MONTH, GETDATE())) + ' - 1
                    THEN 1
                ELSE NULL
                END), 0) AS ' + datename(MM, dateadd(MM, - 1, getdate()))
EXEC sp_executesql @sql

根据注释,只能使用动态sql:

DECLARE @sql NVARCHAR(MAX);
SELECT @sql = N'SELECT isnull(sum(CASE when datepart(mm,rc.datetime) = DATEPART(MONTH, GETDATE()) -1 then 1 else null end),0) AS [' + datename(MM, dateadd(MM, -1, getdate())) +'];'
EXEC sp_executesql @sql

最新更新