Bei dem Versuch, ein Pivot
Ziel für eine zweizeilige Datentabelle in einer Zeile zu erreichen, war mein erster Gedanke, a zu verwenden Cross Apply
. Durch die Verwendung der Cross Apply
kann jede der Zeilen mit einem bestimmten Spaltennamen identifiziert / generiert werden, der von der eindeutigen ID der Zeile abgeleitet ist. (zB 'Lat1' und 'Lat2 für eine' Latitude'-Quellenspalte).
Alles ist in Ordnung, wenn ich INT
oder FLOAT
Datentypen verwende, aber wenn ich versuche, ein DateTime
All zu verwenden, VALUES
werden DateTime
.
Beispiel Versand Lat / Long / DateTime
Wir haben zwei Punkte in einer Schiffsreise, die an zwei verschiedenen Tagen gemeldet wurden:
CREATE TABLE #Shipping
(
[RouteID] [INT] NOT NULL,
[Latitude] FLOAT NOT NULL,
[Longitude] FLOAT NOT NULL,
[Time] DATETIME NOT NULL
);
INSERT #Shipping(RouteID, [Latitude], [Longitude], [Time])
VALUES (1, 18.0221, -63.1206, '24-Jan-2016'),
(2, 17.8353, -62.99667, '25-Jan-2016');
Erfolgreiches CrossApply
Wenn wir CrossApply
die Daten für die ersten drei Spalten verwenden
SELECT col+cast([RouteID] as varchar(1)) new_col
, X.value
FROM #Shipping
CROSS APPLY
(
VALUES
(RouteID, 'Id')
, (Latitude, 'Lat')
, (Longitude, 'Lon')
) X (value, col)
Unsere Ergebnisse sind wie erwartet:
Großartig!
Fehler CrossApply With DateTime
Aber sobald wir DateTime
die Mischung ergänzen :
SELECT col+cast([RouteID] as varchar(1)) new_col
, X.value
FROM #Shipping
CROSS APPLY
(
VALUES
(RouteID, 'Id')
, (Latitude, 'Lat')
, (Longitude, 'Lon')
, ([Time], 'Time')
) X (value, col)
Alle werden DateTime
s
Wie sollte man das umgehen, wenn mein Endziel darin besteht, alle Werte aus der ursprünglichen Tabelle in eine Zeile zu schwenken?
quelle