SQL Server 2008R2'de: Yapmaya çalıştığım şey, aynı tablonun birden çok satırını almak ve mümkün olan en tam satırla gelmek için bunları karşılaştırmaktır. Sütunların değişebileceği ve yazdığım senaryoya erişebildiğim için dinamik olması için sütun aramasına ihtiyacım var, canlı yayında kolayca değiştirilemez. tablo 277 sütunları (ve sayma) vardır, ama şimdilik o basitleştirmek çalışalım:Birden çok satır için tüm sütunların dinamik karşılaştırması
REC FIRST LAST MIDDLE CITY STATE CTRY
1 John Doe Phoenix UNK
2 John Doe Quincy AZ
3 J Doe Phoenix AZ USA
Bu örneğin, bir "ana" satırını seçmek mümkün olmak istiyorum
en REC 1 varsayalım ve nerede değer NULL, sonraki satırdaki değeri seçin ve bu seçili satırlar için null, sonraki satır vb. BONUS Sadece NULLS'lerin üzerine yazamaz, ancak bir sonraki adımın değeri olan 'UNK' ise. İdeal olarak, yukarıda için kombine rekoru gibi görünür:
REC FIRST LAST MIDDLE CITY STATE CTRY
1 John Doe Quincy Phoenix AZ USA
Ben HARİÇ ve çeşitli BİRLİKLERİ etrafında çeviriyorlardı, ancak bu dinamik yönü bodurluk gibi kapıların dışarı çok uzak yapılmış değil benim ilerlemem.
yukarıda istendiği gibi birden çok satır ile bunu yapmak mümkün değilse, ben 2'ye 1 karşılaştırılması ve akabinde 1
3. için EDIT Ne yapmaya çalışıyorum olduğunu karşılaştırarak memnunum dinamik (ve dinamik, ben kayıtlarının sütunları ve sayı oluşumuna meydana gelen değişebileceğini demek) bu oluşturun:
create table #Something
(
REC int
, FIRSTName varchar(10)
, LASTName varchar(10)
, MIDDLE varchar(10)
, CITY varchar(10)
, STATE varchar(10)
, CTRY varchar(10)
)
insert #Something
select 1, 'John', 'Doe', NULL, 'Phoenix', 'UNK', null union all
select 2, 'John', 'Doe', 'Quincy', NULL, 'AZ', null union all
select 3, 'J', 'Doe', NULL, 'Phoenix', 'AZ', 'USA'
select
a.REC
,case
when nullif(a.FIRSTName, 'UNK') is not null then a.FIRSTName
when nullif(b.FIRSTName, 'UNK') is not null then b.FIRSTName
when nullif(c.FIRSTName, 'UNK') is not null then c.FIRSTName
else a.FIRSTName
end FirstName
,case
when nullif(a.LASTName, 'UNK') is not null then a.LASTName
when nullif(b.LASTName, 'UNK') is not null then b.LASTName
when nullif(c.LASTName, 'UNK') is not null then c.LASTName
else a.LASTName
end LastName
,case
when nullif(a.MIDDLE, 'UNK') is not null then a.MIDDLE
when nullif(b.MIDDLE, 'UNK') is not null then b.MIDDLE
when nullif(c.MIDDLE, 'UNK') is not null then c.MIDDLE
else a.MIDDLE
end MIDDLE
,case
when nullif(a.CITY, 'UNK') is not null then a.CITY
when nullif(b.CITY, 'UNK') is not null then b.CITY
when nullif(c.CITY, 'UNK') is not null then c.CITY
else a.CITY
end CITY
,case
when nullif(a.STATE, 'UNK') is not null then a.STATE
when nullif(b.STATE, 'UNK') is not null then b.STATE
when nullif(c.STATE, 'UNK') is not null then c.STATE
else a.STATE
end STATE
,case
when nullif(a.CTRY, 'UNK') is not null then a.CTRY
when nullif(b.CTRY, 'UNK') is not null then b.CTRY
when nullif(c.CTRY, 'UNK') is not null then c.CTRY
else a.CTRY
end CTRY
from #Something a
,#Something b
,#Something c
where a.REC = 1
and b.REC = 2
and c.REC = 3
nasıl anlarsınız bu hepsi aynı kişi olduğunu? Bunun için MAX kullanarak görebiliyorum ama bir grubun ne olduğunu gösteren hiçbir şey yok. Jane Doe’niz varsa ne olur? Neden John ve Jane değil? Belki de gönderdiğiniz örnek çok basitleştirilmiş. –
Kullanıcı, birleştirmek için hangi kayıtların kullanılacağını belirler. Masanın bir Jane Doe varsa, kullanıcı Jane'i seçmedi. Kullanıcı 1, 2 ve 3 (uygun) kayıtlarını seçmiştir. Muhtemelen olası maçlar için mantığa ihtiyacım yok, fakat potansiyel maçlarımı daralttıktan sonra ne yapmalıyım? –
Tamam. Öyleyse John'un nasıl olmalı ve J değil mi? –