2017-01-17 6 views
0

Я хотел бы использовать формулу для установки имен столбцов для операторов case, но простой подход не принимается. Вот пример того, что я пытаюсь сделать - есть ли способ сделать эту работу?(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

спасибо за ответ. Я видел динамические запросы, упомянутые при изучении этого, но не смог заставить их работать. Я могу взять ваш пример и изменить поля, которые обычно поступают из моей таблицы в автономный, и он будет работать, но я не знаю, как добавить. Возможно, я должен был быть более ясным в своем первоначальном посте. Теперь я добавил к нему больше подробностей, которые, надеюсь, прояснят это. –

Смежные вопросы