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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
CROSS APPLY
:Demo: SQL Fiddle
Ich bin mir nicht sicher, wie würden Sie gehen über es, oder, wenn die Leistung anders sein.
Ich gerade geändert meine erste Abfrage, die war mit UNION-ALLs, um die Verwendung von CROSS APPLY, aber ich sehe keinen Unterschied in der Leistung. Beide nahmen fast 47 Sekunden auf avg. Daher ist die Verwendung von CROSS apply nicht geben mir keinen Vorteil gegenüber der Verwendung UNIONALL mehrere Male! jede andere Idee? Meine Tabelle enthält 253730 Zeilen und 47 Spalten und die endgültige Ausgabe-Tabelle enthält 3552220 Zeilen.
Das macht Sinn, es vereinfacht die Abfrage, aber es tut grundsätzlich das gleiche.
InformationsquelleAutor Hart CO