2017-01-17 32 views
0

我想使用公式爲案例語句設置列名,但不接受簡單的方法。下面是我試圖做的例子 - 有沒有辦法做到這一點?(MS SQL Server)使用公式設置案例語句列名稱

select 

ID 

-- Pull DeDupe_Decision_Count for that ID last month (EOM_Date), where each ID has multiple rows in the data set for each data month 

, sum(case when EOM_Date = CONVERT(DATE, DATEADD(s,-1,DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))) 
then DeDupe_Decision_Count end) 
as CONVERT(DATE, DATEADD(s,-1,DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))) 

-- Pulling the same for two months ago 

, sum(case when EOM_Date = CONVERT(DATE, DATEADD(s,-1,DATEADD(m,-2,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))) 
then DeDupe_Decision_Count end) 
as CONVERT(DATE, DATEADD(s,-2,DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))) 

-- Pulling the same for three months ago 

, sum(case when EOM_Date = CONVERT(DATE, DATEADD(s,-1,DATEADD(m,-3,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))) 
then DeDupe_Decision_Count end) 
as CONVERT(DATE, DATEADD(s,-2,DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)))) 

-- Would like to do the same for 12-24 months 
from Mytable 
group by ID 

我想用公式代替靜態日期,因爲這將每月更新幷包含12-24個月的數據。我可以使用變量,並在上個月,2個月前,3個月前等列出名稱,但我寧願列名稱是月份的日期。

回答

0

這需要動態查詢

DECLARE @sql VARCHAR(max) 

SET @sql = 'select 
case 

when EOM_Date = CONVERT(DATE, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))) 

then ''DeDupe_Decision_Count'' 

end as '+ Quotename(CONVERT(DATE, Dateadd(s, -1, Dateadd(mm, Datediff(m, 0, Getdate()), 0)))) 

PRINT @sql 

exec(@sql) 
+0

感謝您的答覆。我已經看到動態查詢時提到了這一點,但沒有能夠使他們的工作。我可以採取你的例子,並將通常會從我的表到單獨的字段,它將工作,但我不知道如何從中添加。也許我應該在我的第一篇文章中更清楚。現在我已經添加了更多的細節,希望能夠清除它。 –