2016-05-26 6 views
0

Wie kann ich für eine Spalte mit Daten drehen, die MONTH als Parameter ist?PIVOT mit ausgewählten MONTH()

Beispiel:

Daten:

|-----------------------------------| 
| def_kstnr | def_zeit | def_datum | 
|-----------------------------------| 
| 100  | 3.2  | 2011-11-02 | 
| 110  | 2.8  | 2011-02-03 | 
| 120  | 5.4  | 2011-11-04 | 
| 130  | 2.4  | 2011-08-05 | 
| 140  | 4.9  | 2011-09-06 | 
| 150  | 1.5  | 2011-10-07 | 
| 160  | 2.6  | 2011-12-08 | 
|-----------------------------------| 

Abfrage:

SELECT 
    def_kstnr, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mrz, 
    [4] AS Apr, 
    [5] AS Mai, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Okt, 
    [11] AS Nov, 
    [12] AS Dez 
FROM 
(Select 
def_kstnr, 
def_zeit, 
MONTH(def_datum) as TMonth 
    from 
    dbo.def) source 
PIVOT 
(
    SUM(def_zeit) 
    FOR TMonth 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvtMonth 

Ergebnis sollte wie folgt aussehen, wenn der Parameter Monat = 2 (Februar):

91.363.210
| def_kstnr | Feb | 
    110   2.8 

und wenn der Parameter Monat = 11 (November)

| def_kstnr | Nov | 
    100   3.2 

ich googeln schon, aber ich weiß nicht, was das Schlüsselwort für diesen meinen Fall ist. Ich habe es noch nicht gefunden. Danke ..

+0

Sie müssten dynamische SQL verwenden - jede bestimmte Abfrage erzeugt immer eine Ergebnismenge mit einer festen "Form" - die Anzahl der Spalten, ihre * Namen * und Typen. Andererseits ist das Ändern einer Spaltenüberschrift innerhalb einer * Anwendung * oder eines * Berichts * in der Regel trivial - muss dies in * SQL * getan werden? –

+0

Was ist Ihr RDBMS? –

Antwort

0

Wenn Sie SQL Server verwenden, können Sie eine dynamische SQL-ähnliche

erstellen
DECLARE @Month Int = 11, 
     @MonthName VARCHAR(20), 
     @Sql NVARCHAR(MAX) 

SET  @MonthName = CONVERT(VARCHAR(3), DATEADD(Month, @Month, -1), 107) 
SET  @Sql = N' SELECT def_kstnr, 
          def_zeit AS ' + QUOTENAME(@MonthName) + ' 
        FROM DataTable 
        WHERE MONTH([def_datum]) = @Month' 

EXEC sp_executesql @Sql, N'@Month INT', @Month = @Month 

Sie können Ihre SUM(def_zeit) und GROUP BY def_kstnr zum dynamischen SQL hinzufügen, wenn das das Ergebnis ist, dass Sie sind nach .. schwer zu sagen, durch Ihr erwartetes Ergebnis