Ich versuche herauszufinden, die am besten optimierte Möglichkeit, alternative Zeilen einer Spalte in zwei Spalten aufzuteilen. Lassen Sie mich das erklären durch ein BeispielVerteilen Sie Daten in zwei Spalten
Ich habe folgende Daten
Resultset I
im obigen Beispiel wollen, die alternative Zeile verschoben zu einer neuen Spalte. Ich habe eine Lösung gefunden, aber es ist nicht zu optimieren d wenn ich Millionen von Datensätzen habe.
Meine Lösung (nicht optimiert)
;WITH RecCtea
AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY (select 1)) rowid FROM tabA ta
)
SELECT a.cola,b.cola FROM (
(SELECT * FROM RecCtea rc WHERE rc.rowid%2 = 0) a JOIN
(SELECT * from RecCtea rc2 where rc2.rowid%2 != 0) b
on a.rowid = b.rowid+1
)
SQLfiddle ist nicht so, hier zu arbeiten ist das Schema
CREATE TABLE tabA ( cola int ); INSERT tabA ( cola ) VALUES (100),(-100),(200),(-250),(300),(-350),(-400),(NULL)
Behaupten Sie, der alternative Wert immer eine negative Zahl ist? Und/oder immer nach seinem Elternteil eingefügt? Oder dass der erhöhte ABSOLUTE-Wert der Spalte konsistent ist? Oder nur ein Beispiel, und Sie postulieren mit ROW_NUMBER(), um es zu lösen –
@ Clifton_h nein, es könnte ein positiver oder ein negativer Wert sein. Ich will nur Zeile Nummer 1,3,5,7 ... in einer Spalte und 2,4,6,8 ... in einem anderen –
Also gibt es keine Sorge für die Reihenfolge von sagen Col_Odd und Col_Even? –