Bir tarih değerine dayanarak sütun başına son olmayan boş değer değerini seçmeye çalışıyorum.Sıfır olmayan sonraki değer nasıl seçilir? Her sütunda. T-SQL
Email Name1 Name2 Job Date
[email protected] Ron NULL NULL 2015-01-01 00:00:00.000
[email protected] Dave Smith NULL 2014-01-01 00:00:00.000
[email protected] NULL NULL NULL 2013-01-01 00:00:00.000
[email protected] NULL Smith NULL 2014-01-01 00:00:00.000
[email protected] NULL Ford Plumber 2015-01-01 00:00:00.000`
Ben e-posta adresi başına her sütun için yeni boş olmayan değeri görüntülemek istiyorum -
Şöyle bir tablo var.
çıkışı olmalı - Zaten bu sorunu çözmek için bazı oldukça çirkin SQL yazdım
Email Name1 Name2 Job
[email protected] Ron Smith NULL
[email protected] NULL Ford Plumber
ancak ben daha çok sütunlu başka bir tabloya bu mantığı uygulamak istiyor.
Soruma Soru: - Her bir sütuna katılmak zorunda kalmadan bunu yapmanın daha kolay bir yolu var mı? İşte
select distinct a.[Email],b.[Name1],c.[Name2],d.[job] from
(
select [Email] from #test
)
A
left join
(
SELECT [Email],
FIRST_VALUE([Name1]) over(partition by [Email] order by [Date] desc) as [Name1]
from #test
where [Name1] is not null
) b
on a.[Email] = b.[Email]
left join
(
SELECT [Email],
FIRST_VALUE([Name2]) over(partition by [Email] order by [Date] desc) as [Name2]
from #test
where [Name2] is not null
) c
on a.[Email] = c.[Email]
left join
(
select [Email],
FIRST_VALUE([Job]) over(partition by [Email] order by [Date] desc) as [Job]
from #test
where [Job] is not null
) d
on a.[Email] = d.[Email]
bu yardımcı olur örnek tablo için DDL/DML var - - aşağıdaki gibi
Güncel çözümdür
create table #test
([Email] nvarchar(50),
[Name1] nvarchar(50),
[Name2] nvarchar(50),
[Job] nvarchar(50),
[Date] datetime)
insert into #test
values
('[email protected]', 'Ron', null,null,'20150101'),
('[email protected]', 'Dave' ,'Smith',null, '20140101'),
('[email protected]', null, null, null ,'20130101'),
('[email protected]', null, 'Smith', null, '20140101'),
('[email protected]', null, 'Ford', 'Plumber','20150101')