Khi cố gắng đạt được Pivotmục tiêu -ed cho bảng dữ liệu hai hàng thành một hàng, suy nghĩ đầu tiên của tôi là sử dụng a Cross Apply. Bằng cách sử dụng, người Cross Applyta có thể xác định / tạo từng hàng với một tên cột cụ thể được lấy từ id duy nhất của hàng. (ví dụ: 'Lat1' và 'Lat2 cho cột nguồn' Latitude ').
Tất cả đều ổn khi tôi sử dụng INThoặc FLOATloại dữ liệu nhưng khi tôi cố gắng sử dụng DateTimetất cả VALUEStrở thành DateTime.
Ví dụ Vận chuyển Lat / Long / DateTime
Chúng tôi có hai điểm trong một hành trình tàu được báo cáo vào hai ngày khác nhau:
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');
CrossApply thành công
Nếu chúng ta sử dụng CrossApplydữ liệu cho ba cột đầu tiên
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)
Kết quả của chúng tôi là như mong đợi:
Tuyệt quá!
Thất bại chéo với DateTime
Nhưng một khi chúng ta thêm DateTimevào hỗn hợp:
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)
Tất cả trở thành DateTimes
Làm thế nào một người nên làm việc xung quanh điều này nếu mục tiêu cuối cùng của tôi là xoay tất cả các giá trị từ bảng gốc thành một hàng?



