Wie teilt man eine einzelne Zeile in mehrere Zeilen in SQL

Ich habe eine Tabelle die wie folgt aussieht..es hat mehrere Spalten für unterschiedliche Latenzen

Date   API    Latency1_Avg Latency1_Min Latency1_Max Latency2_Avg Latency2_Min Latency2_Max
----   ---    ------------ ------------ ------------ ------------ ------------ ------------
7/26/13  Foo    12              35          45           453           433         435
7/26/13  Bar    33              33          33           234           243         234

Ich möchte die Ausgabe einer Tabelle, die spaltet jede Zeile in mehrere Zeilen wie folgt

Date    API   Latency  Aggregation  Value
----    ----  -------  -----------   -----
7/26/13 Foo   Latency1   Avg         12
7/26/13 Foo   Latency1   Min         35
7/26/13 Foo   Latency1   Max         45
7/26/13 Foo   Latency2   Avg         453
7/26/13 Foo   Latency2   Min         433
7/26/13 Foo   Latency2   Max         435

.....

Recht Was ich jetzt Tue, ist diese

    SELECT 
    Date,
    API, 
   "Latency1" AS Latency,
    "Avg" AS Calculation,
    Latency1_Avg AS Value  
    FROM Table UNION ALL
    SELECT 
    Date,
    API, 
    "Latency1" AS Latency,
    "Min" AS Calculation,
    Latency1_Min AS Value  
    FROM Table UNION ALL
    SELECT 
    Date,
    API, 
    "Latency1" AS Latency,
    "Max" AS Calculation,
    Latency1_Max AS Value  
    FROM Table UNION ALL

.... also auf

Dies ist sehr ineffizient, Leistung klug, denn ich bin ein table scan " für jede von der select-Anweisung...wenn diese Tabelle ist riesig, dann dauert es eine lange Zeit, um die Abfrage...

Gibt es eine bessere n schneller Weg, dies zu tun? Möglicherweise verwenden Sie eine benutzerdefinierte Funktion?

die Tabelle ist nicht indiziert und ich bin nicht der admin für diese SQL server, so kann ich nicht hinzufügen, Indizes. Jede andere Technik, um die Geschwindigkeit der Abfrage ? da die CROSS APPLY performance ist die gleiche wie UNION ALLE wie unten erwähnt

InformationsquelleAutor user330612 | 2013-07-26

Schreibe einen Kommentar