Animesh Datta
Привет ,
Сначала я создаю три временные таблицы для объяснения .
create table #tmp1
(
referenceno varchar(10),
statuscode varchar(20),
)
create table #tmp2
(
referenceno varchar(10),
statuscode varchar(20),
)
create table #tmp3
(
referenceno varchar(10),
statuscode varchar(20),
)
--Now insert data
insert into #tmp1 values('123', 'pending')
insert into #tmp1 values('234', 'pending')
insert into #tmp1 values('345', 'pending')
insert into #tmp1 values('456', 'pending')
insert into #tmp1 values('567', 'pending')
insert into #tmp1 values('678', 'pending')
insert into #tmp2 values('345', 'going')
insert into #tmp2 values('456', 'going')
insert into #tmp2 values('567', 'going')
insert into #tmp3 values('456', 'done')
insert into #tmp3 values('567', 'done')
insert into #tmp3 values('678', 'done')
чтобы получить необходимый ОП, сначала объедините все эти три таблицы .
а затем используйте Row_Number с предложением Partition by, чтобы упорядочить их один за другим по статусу и, наконец, использовать общее табличное выражение для получения требуемого OP .
;with CTE
as
(
select ROW_NUMBER() OVER (partition by referenceno ORDER BY statuscode) AS RowNumber , *
from
(
select * from #tmp1
union all
select * from #tmp2
union all
select * from #tmp3
)xx)
select referenceno , statuscode from cte where RowNumber=1
ОПЕРАЦИЯ
referenceno statuscode
123 pending
234 pending
345 going
456 done
567 done
678 done
Вот еще одно решение, которое может помочь вам без использования CTE
Сначала выберите только те записи из #tmp1 или первой таблицы, которые отсутствуют в двух других таблицах (#tmp2 и #tmp3)
снова выберите только те записи из #tmp2 или второй таблицы, которые отсутствуют в
последняя таблица (#tmp3)
и, наконец, сделайте объединение всех этих наборов записей .
select referenceno , statuscode from #tmp1 where referenceno
not in
(
select referenceno from #tmp2
union all
select referenceno from #tmp3
)
union all
select referenceno , statuscode from #tmp2 where referenceno
not in
(
select referenceno from #tmp3
)
union all
select referenceno , statuscode from #tmp3
Вот и ОП есть
referenceno statuscode
123 pending
234 pending
345 going
456 done
567 done
678 done
Спасибо