2012-03-25 8 views
0

Ich habe diese SELECT Aussage: die Spaltennamen angeben, nach dem aktuellen MonatSpaltennamen durch die aktuelle Datum in SQL Server dynamisch definieren

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 

ich will.

Ich habe eine Funktion get_month_name, die das Monatszeichen wie (d1, d2, d3, f0 ..) erhält und eine Zeichenfolge zurückgibt, die den Monatsnamen auf Hebräisch darstellt.

Was ist der beste Weg, um das Problem zu lösen?

Gerade für die Aufzeichnung versuche ich dies in einer gespeicherten Prozedur in SQL Server zu tun

+2

Sie können dies nicht in T-SQL tun - Ihre beste Wette würde wetten, die Werte, wie Sie sie jetzt in Ihrer Abfrage haben, zurückgeben ** und zusätzlich ** die ausgeschriebenen Monatsnamen für jedes dieser sechs Monate zurückgeben. Lassen Sie das Frontend (Web-App oder was auch immer) die tatsächliche Anzeige mit den Monatsnamen anstelle der Spaltennamen behandeln –

Antwort

0

Es ist möglich, dies mit dynamischem SQL zu tun:

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 

jedoch dynamische SQL hat seine Probleme. Eine ausführliche Erläuterung finden Sie unter The Curse and Blessings of Dynamic SQL.

Also, wenn es irgendwie möglich ist, würde ich eher nicht Verwendung dynamische SQL, aber so etwas wie marc_s suggested in his comment:
verlassen die Abfrage, wie es ist, gibt die Monatsnamen zusätzlich und lassen Sie den Client die Monatsnamen angezeigt wird in der richtige Ort.

+0

@betite warum haben Sie dies nicht als Antwort gewählt? –