这里有许多关于将列命名为变量的问题,我不认为这是这些问题的重复,因为我想使用计算。
我想用前一个月的名字来命名我的专栏。我希望这能工作:
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