2016-06-30 2 views
0

Hi Ich habe Unpivot angewandt und auf meine Daten gedreht. Alles läuft gut, außer ich möchte meine Ausgabe in der gleichen Reihenfolge wie in der "IN" -Klausel von Unpivot angegeben anordnen. Bitte helfen Sie. Hier ist, was ich bisher getan haben:Wie man die Sortierreihenfolge von Unpivot manuell einstellt und in sql Server schwenkt

CREATE TABLE #myTable 
    (
    [ForYear] [smallint] NOT NULL, 
    [ForMonth] [tinyint] NOT NULL, 
    [TrainingDoneThisMonth] [bit] NULL, 
    [FoodQualityStatus] [bit] NULL, 
    [NoOfAllDrugTests] [int] NULL, 
    [NoOfAllAlcoholTests] [int] NULL 
    ) 


    INSERT INTO #myTable 
    values 
    (2016,1,1,0,5,10), 
    (2016,2,0,1,15,5), 
    (2016,3,1,0,20,15), 
    (2016,4,0,1,5,25), 
    (2016,5,1,0,10,30), 
    (2015,1,1,0,5,10), 
    (2015,2,0,1,15,5), 
    (2015,3,1,0,20,15), 
    (2015,4,0,1,5,25), 
    (2015,5,1,0,10,30) 
select * from(SELECT * 
    FROM (
     SELECT DATENAME(month,DATEADD(month,[ForMonth]-1,'1970-01-01')) as d, 
       CAST([TrainingDoneThisMonth] as int) as [TrainingDoneThisMonth], 
       CAST([FoodQualityStatus] as int) as [FoodQualityStatus], 
       [NoOfAllDrugTests], 
       [NoOfAllAlcoholTests] 

     FROM #myTable 
     WHERE foryear=2016 
     ) d 
    UNPIVOT (
     [VALUES] FOR [Objective] in ([TrainingDoneThisMonth],[FoodQualityStatus],[NoOfAllDrugTests],[NoOfAllAlcoholTests]) 
    ) unpvt 
) as p 
PIVOT (
    SUM([VALUES]) FOR d IN ([January],[February],[March],[April],[May]) 
) as pvt 

ich in dieser Reihenfolge führen müssen: [TrainingDoneThisMonth], [FoodQualityStatus], [NoOfAllDrugTests], [NoOfAllAlcoholTests]

Ich habe versucht: SQL Server , restrict UNPIVOT to order columns automatically aber unfähig, es zum Laufen zu bringen.

+0

Versuchen Sie Ändern '* SELECT' in der meisten Top-Abfrage an Ihre Sortierreihenfolge. Es gibt nicht so viele Spalten zum Austippen. – Kramb

Antwort

1

Try this:

 CREATE TABLE #myTable 
     (
     [ForYear] [smallint] NOT NULL, 
     [ForMonth] [tinyint] NOT NULL, 
     [TrainingDoneThisMonth] [bit] NULL, 
     [FoodQualityStatus] [bit] NULL, 
     [NoOfAllDrugTests] [int] NULL, 
     [NoOfAllAlcoholTests] [int] NULL 
     ) 


     INSERT INTO #myTable 
     values 
     (2016,1,1,0,5,10), 
     (2016,2,0,1,15,5), 
     (2016,3,1,0,20,15), 
     (2016,4,0,1,5,25), 
     (2016,5,1,0,10,30), 
     (2015,1,1,0,5,10), 
     (2015,2,0,1,15,5), 
     (2015,3,1,0,20,15), 
     (2015,4,0,1,5,25), 
     (2015,5,1,0,10,30) 
    select *, 
      CASE WHEN objective = 'TrainingDoneThisMonth' THEN 1 
       WHEN objective = 'FoodQualityStatus' THEN 2 
       WHEN objective = 'NoOfAllDrugTests' THEN 3 
       WHEN objective = 'NoOfallAlcoholTests' THEN 4 
      ELSE 5 END AS [ranking] 
from(SELECT * 
     FROM (
      SELECT DATENAME(month,DATEADD(month,[ForMonth]-1,'1970-01-01')) as d, 
        CAST([TrainingDoneThisMonth] as int) as [TrainingDoneThisMonth], 
        CAST([FoodQualityStatus] as int) as [FoodQualityStatus], 
        [NoOfAllDrugTests], 
        [NoOfAllAlcoholTests] 

      FROM #myTable 
      WHERE foryear=2016 
      ) d 
     UNPIVOT (
      [VALUES] FOR [Objective] in ([TrainingDoneThisMonth],[FoodQualityStatus],[NoOfAllDrugTests],[NoOfAllAlcoholTests]) 
    ) unpvt 
) as p 
PIVOT (
    SUM([VALUES]) FOR d IN ([January],[February],[March],[April],[May]) 
) as pvt 
ORDER BY ranking 
DROP TABLE #myTable 
+0

DROP TABLE #myTable Zauberfehler DROP TABLE #myTable –

+0

@KhanImranAli huh? Ich könnte mehr Koffein brauchen, aber ich kann den Rechtschreibfehler dort nicht sehen –

+1

Dank "Arthur D" funktioniert wie ein reibungsloser Verbrecher. @KhanImranAli Du brauchst etwas Ruhe. –

Verwandte Themen