Если вы делаете это в 2 шага, это довольно просто:
- Сначала вставьте строки с высоким приоритетом в выходную таблицу
- Вставить строки с низким приоритетом в выходную таблицу, исключая те, которые уже
подарок от первой вставки. (Достигается с помощью левого соединения в этом случае)
create table ttemp(
col1 char(10),
col2 varchar(100))
INSERT INTO ttemp VALUES('101','shshsfhgs')
INSERT INTO ttemp VALUES('102','ertqehwrgs')
INSERT INTO ttemp VALUES('0102','witpipqcqp')
INSERT INTO ttemp VALUES('0103','retrtyhwqpp')
create table #temp1
(ref1 char(10),
refdata varchar(100))
Create table #temp2
(ref1 char(10),
refdata varchar(100))
insert into #temp1 values(101,'aaaaaaaaaaaaaa')
insert into #temp1 values(102,'bbbbbbbbbbbbbb')
insert into #temp1 values(103,'cccccccccccccc')
INSERT INTO #temp2
SELECT t1.col1, t.refdata
FROM ttemp t1
INNER JOIN #temp1 t on t1.col1 = t.ref1
INSERT INTO #temp2
SELECT t1.col1, t.refdata
FROM ttemp t1
INNER JOIN #temp1 t on t1.col1 = '0' + t.ref1
LEFT JOIN #temp2 t2 ON t.ref1 = t2.ref1
WHERE ISNULL(t2.ref1,0) = 0
SELECT * FROM #temp2
drop table ttemp
drop table #temp1
drop table #temp2
Результаты:
ref1 refdata
101 aaaaaaaaaaaaaa
102 bbbbbbbbbbbbbb
0103 cccccccccccccc
Вот еще один способ, основанный на ответе Джо Стефанелли и изменив его для получения требуемых результатов:
SELECT t1.col1, COALESCE(ta.refdata,t.refdata ) [refdata]
FROM ttemp t1
LEFT JOIN #temp1 t ON t1.col1 = t.ref1
LEFT JOIN #temp1 ta ON t1.col1 = '0' + ta.ref1 AND ta.ref1 NOT IN (SELECT ref1 FROM ttemp INNER JOIN #temp1 ON col1 = ref1 )
WHERE ta.ref1 IS NOT NULL
OR t.ref1 IS NOT NULL
Результаты:
col1 refdata
101 aaaaaaaaaaaaaa
102 bbbbbbbbbbbbbb
0103 cccccccccccccc