2015-02-24 5 views
0

Я стараюсь, чтобы весь нулевой адрес был заполнен, посмотрев на CaseID и найдите первый соответствующий нулевой адрес. Спасибо за помощь.sql query update row

Некоторые таблицы:

IndexId CaseId Address 
------ ------- ------------ 
1   10  1 ABC STREET 
2   10  NULL 
3   10  NULL 
4   20  NULL 
5   20  100 TEST STREET 
6   20  NULL 
7   30  NULL 
8   30  NULL 
9   30  900 DEV AVENUE 

Таблица результатов:

IndexId CaseId Address 
------ ------- ------------ 
1   10  1 ABC STREET 
2   10  1 ABC STREET 
3   10  1 ABC STREET 
4   20  100 TEST STREET 
5   20  100 TEST STREET 
6   20  100 TEST STREET 
7   30  900 DEV AVENUE 
8   30  900 DEV AVENUE 
9   30  900 DEV AVENUE 
+0

Вы говорите, что первое соответствие непустой адрес, первый в соответствии с чем? (алфавитный, индексный и т. д.) – jarlh

ответ

1
UPDATE Table T1 
SET T1.Address = 
    (SELECT TOP 1 T2.Address FROM Table T2 
     WHERE T2.CaseId = T1.CaseId AND T2.Address IS NOT NULL) 
WHERE T1.Address IS NULL 
0

Набор для первого по алфавиту:

update tablename t1 set Address = (select min(Address) from tablename t2 
            where t2.CaseId = t1.CaseId) 
where Address is null 

Или первый accordning к IndexID:

update tablename t1 set Address = (select top 1 Address from tablename t2 
            where t2.CaseId = t1.CaseId 
            and ADDRESS IS NOT NULL 
            order by indexid) 
where Address is null 

РЕДАКТИРОВАТЬ: пропущенный не имеет значения в подзапросе, спасибо TZHX.

0

Предположим, таблица называется @t:

SELECT t1.* 
FROM @t AS t1 
    LEFT JOIN @t AS t2 ON t2.CaseID = t1.CaseID 
WHERE t1.Address is not null