2016-09-07 21 views
0

列に変数の名前を付けることについては数多くの質問がありますが、計算を使用したいのでこれを複製するとは思われません。列の名前として計算された日付SQL Server 2008

前回の月の後に私のカラムの名前を付けたいと思います。

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

しかし、それは、私が間違った構文エラーを取得しません:

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())) 

や読みやすさのために:私はこれが動作するように期待します。これは達成可能ですか?与えられた助けを前もって感謝します。

+3

のみ、動的SQL – Squirrel

+0

動的に列名を変更すると、数を引き起こすことが起こっていると道に挑戦するおそらくここで実際に何をしようとしているのかをよく理解すれば、より良い解決策を見つけるのに役立つかもしれません。それ以外の場合は、すでに掲載されている動的SQLオプションが正常に動作するはずです。 –

+0

もう1つのコメントは、日付部分の略語を避けることを好みますが、使用する場合は一貫していなければなりません。いくつかの場所であなたはMMと他の月を使用します。 http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx –

答えて

2

のみ達成可能動的SQLを使用して、動的SQLを使用したコメントを1として

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 
2

これを試してみてください:

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 
関連する問題