Một đồng nghiệp của tôi có một vấn đề với một truy vấn sql: -Làm thế nào để thay thế NULL trong một tập kết quả với giá trị NOT NULL cuối cùng trong cùng một cột?
Lấy sau đây là một ví dụ, hai bảng tạm thời: -
select 'John' as name,10 as value into #names
UNION ALL SELECT 'Abid',20
UNION ALL SELECT 'Alyn',30
UNION ALL SELECT 'Dave',15;
select 'John' as name,'SQL Expert' as job into #jobs
UNION ALL SELECT 'Alyn','Driver'
UNION ALL SELECT 'Abid','Case Statement';
Chúng tôi chạy truy vấn sau trên bảng để cung cấp cho chúng ta một joinet resultset: -
select #names.name, #names.value, #jobs.job
FROM #names left outer join #jobs
on #names.name = #jobs.name
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 NULL
Vì 'Dave' không tồn tại trong bảng #jobs, anh ta được cung cấp giá trị NULL như mong đợi.
Đồng nghiệp của tôi muốn sửa đổi truy vấn để mỗi giá trị NULL được cung cấp cùng giá trị với mục nhập trước đó.
Vì vậy, bên trên sẽ là: -
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 Driver
Lưu ý rằng Dave bây giờ là một 'điều khiển'
Có thể có nhiều hơn một giá trị NULL theo thứ tự,
name value job
John 10 SQL Expert
Abid 20 Case Statement
Alyn 30 Driver
Dave 15 NULL
Joe 15 NULL
Pete 15 NULL
Trong trường hợp này Dave, Joe và Pete tất cả nên là 'Driver', vì 'Driver' là mục nhập không phải là lần cuối.
có ràng buộc về đơn đặt hàng hay là trình điều khiển Dave, Joe và Pete chỉ vì chúng được trả tự do sau Alyn? – GolfWolf
Đây là điều bạn có thể muốn thực hiện trong mã thay thế. – Magnus
Trong ví dụ hiện tại không có thứ tự, vì vậy có chỉ tự ý quay trở lại. –