2012-03-25 4 views
0

У меня есть этот SELECT заявление:Определить имя столбца динамически текущей даты в SQL Server

SELECT 
    ProjectId, 
    ProjectName,    
    D3 as "three month ago", 
    D2 as "two month ago", 
    D1 as "last month", 
    F0 as "current month", 
    F1 as "next month", 
    F2 as "next two month",   
FROM 
    View_Year_Forcast 

Я хочу, чтобы указать имя столбца в соответствии с текущим месяцем.

У меня есть функция get_month_name, которая получает символ месяца как (d1, d2, d3, f0 ..) и возвращает строку, которая представляет название месяца на иврите.

Каков наилучший способ решить проблему?

Только для записи я пытаюсь сделать это в хранимой процедуре в SQL Server

+2

Вы не можете сделать это в T-SQL - ваш лучший пари поставил бы, чтобы вернуть значения, как они есть в вашем запросе, и ** дополнительно ** возвратить указанные месячные имена для каждого из этих шести месяцев. Пусть интерфейс (веб-приложение или что-то еще) обрабатывает фактический дисплей с использованием имен месяцев вместо имен столбцов –

ответ

0

Это является можно сделать это с помощью динамического SQL:

declare @month nvarchar(50) 
declare @sql nvarchar(1000) 

set @month = 'March' -- execute your `get_month_name` function here instead 

set @sql = 'select D3 as ' + @month + ' from View_Year_Forcast' 

exec sp_executesql @sql 

Однако, динамический SQL имеет свои проблемы. См. The Curse and Blessings of Dynamic SQL для подробного объяснения.

Так что, если это как-то возможно, я предпочел бы не использовать динамический SQL, но сделать что-то вроде marc_s suggested in his comment:
оставить запрос, как она есть, вернуть название месяцев в дополнении и позволить клиенту отображать название месяцев в в нужном месте.

+0

@betite, почему вы не выбрали это как ответ? –

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