(
select item1, ordering = CASE WHEN item2 IS NULL THEN 1 ELSE 0 END
from tableA
Where TableB.Item3 = TableA.Item3
order by ordering
)
--内有order by ,需要在select 后面加top ,所以会报错!
正确的为:
Update TableB
Set Item1 =
(
select TOP 1 item1
from
(
select top 100 percent item1, ordering = CASE WHEN item2 IS NULL THEN 1 ELSE 0 END
from tableA
Where TableB.Item3 = TableA.Item3
order by ordering
) a
)
create table TableA(Item1 varchar(10),Item2 varchar(10),Item3 int)
insert TableA select 'qq','',1
union all select 'aa','a',3
union all select 'zz','b',2
union all select 'ww','',4
union all select 'ee','c',4
create table TableB(Item1 varchar(10),Item2 varchar(10),Item3 int)
insert TableB select '','',8
union all select '','a',9
union all select '','b',10
union all select '','',4
union all select '','c',4
Update TableB
Set TableB.Item1 =
(
select TOP 1 item1 from
(
select top 100 percent TableA.Item1, ordering = CASE WHEN TableA.Item2 IS NULL THEN 1 ELSE 0 END
from TableA,TableB
Where TableB.Item3 = TableA.Item3
order by ordering
)a
)
select * from TableB
drop table TableA,TableB
Item1 Item2 Item3
---------- ---------- -----------
ww 8
ww a 9
ww b 10
ww 4
ww c 4
/* it will be something like this
but i cannot use embedded select sentence
*/
Update TableB
Set Item1 =
(
select TOP 1 item1
from
(
select item1, ordering = CASE WHEN item2 IS NULL THEN 1 ELSE 0 END
from tableA
Where TableB.Item3 = TableA.Item3
order by ordering
)
)