create table TestList
(
TestID int
)
insert TestList
values
(1089)
, (41651)
, (1235)
, (6987)
, (51555)
, (71666)
, (01099)
, (03368)
, (45646)
, (55566)
, (77788)
, (02347)
, (03333)
, (04444)
create table WUList
(
TestIDS int,
AreaPerson1 varchar(10)
, AreaPerson2 varchar(10)
, AreaPerson3 varchar(10)
)
insert WUList
values
('01089','TSmith','MBlevins','OMyhead')
, ('01099','RJohns',NULL,NULL)
, ('03368','RJohns','TPayne','MSmith')
, ('45646','TSmith','MBlevins',NULL)
, ('55566',NULL,'MBlevins','WRestle')
, ('77788','ORandy',NULL,'LOrdy')
, ('02347','MArt','TPayne','MSmith')
, ('03333',NULL,NULL,NULL)
, ('04444',NULL,NULL,NULL)
create table WUArea
(
Area varchar(3),
AreaPerson1 varchar(10)
, AreaPerson2 varchar(10)
, AreaPerson3 varchar(10)
)
insert WUArea
values
('01','ORandy','MBlevins','OMyhead')
, ('03','RJohns','SNicks','IPfreely')
, ('04','RJohns','MBlevins','BFort')
, ('07','TSmith','SNicks','BFort')
, ('41','MArt','TSmith','WRestle')
, ('45','ORandy','ORandy','ORandy')
select a.TestID
, case
when b.TestIDS is null or c.Area is null then 'JDoe'
else ISNULL(b.AreaPerson1,c.AreaPerson1)
end as AreaPerson1
, case
when b.TestIDS is null or c.Area is null then 'SDoe'
else ISNULL(b.AreaPerson2,c.AreaPerson2)
end as AreaPerson2
, case
when b.TestIDS is null or c.Area is null then 'TBuck'
else ISNULL(b.AreaPerson3,c.AreaPerson3)
end as AreaPerson3
from TestList a
left join WUList b on a.TestID = b.TestIDS
left join WUArea c on '0' + LEFT(a.TestID,1) = c.Area
обратите внимание: в приведенном выше примере данных в TestList недостаточно связанных данных, поэтому я добавил TestIDS из таблицы WUList в таблицу TestList, чтобы больше с ними можно было работать.
я взбил это довольно быстро, поэтому, если есть какие-либо другие вариации в наборах данных ваших таблиц, вам нужно будет отрегулировать. до сих пор он охватывает всю вашу базу (по крайней мере из того, что я могу понять)
, если вы хотите увидеть больше данных в наборе результатов, чтобы убедиться, что учитываются значения NULL, используйте приведенное ниже утверждение.
select a.TestID, '0' + LEFT(a.TestID,1) as WUAreaTestID
, b.AreaPerson1
, case
when b.TestIDS is null or c.Area is null then 'JDoe'
else ISNULL(b.AreaPerson1,c.AreaPerson1)
end as AreaPerson1n
, b.AreaPerson2
, case
when b.TestIDS is null or c.Area is null then 'SDoe'
else ISNULL(b.AreaPerson2,c.AreaPerson2)
end as AreaPerson2n
, b.AreaPerson3
, case
when b.TestIDS is null or c.Area is null then 'TBuck'
else ISNULL(b.AreaPerson3,c.AreaPerson3)
end as AreaPerson3n
, c.*
from TestList a
left join WUList b on a.TestID = b.TestIDS
left join WUArea c on '0' + LEFT(a.TestID,1) = c.Area