Сортировка по нескольким столбцам (датам) sql

Допустим, есть 2 вида информирования, звонком и письмом. Нужно их сортировать по убыванию одновременно, то есть, сначала идет 22 марта сот, потом 21 марта письмо, потом опять 20 марта сот и так далее, как это сделать? В данном запросе, как я понимаю, задается первостепенный и второстепенный критерий при совпадении одного из них, но у меня совпадений быть не может, так как человек информирован в этот день либо звонком либо письмом.

SELECT sot, pocht
from table
order by sot, pocht desc

Ответы (1 шт):

Автор решения: Konst

не уверен, что вы хотите, но может быть это?

declare @t table (sot datetime, pocht datetime)
insert into @t (sot, pocht)
values ('20220325', null), (null, '20220320'), ('20220225', null), (null, '20220321'), ('20220321', null)

SELECT coalesce(sot, pocht) as [date], case when sot is null then 'pocht' else 'sot' end as [send by]
from @t
order by [date] desc, [send by] desc

вариант для большего кол-ва полей (добавлен столбец sms):

declare @t table (sot datetime, pocht datetime, sms datetime)
insert into @t (sot, pocht, sms)
values ('20220325', null, null), (null, '20220320', null), ('20220225', null, null), (null, '20220321', null), ('20220321', null, null), (null, null, '20220328'), (null, null, '20220320')


select t.sot as [date], 'sot' as [send]
from @t t where t.sot is not null
union all
select t.pocht as [date], 'pocht' as [send]
from @t t where t.pocht is not null
union all
select t.sms as [date], 'sms' as [send]
from @t t where t.sms is not null
order by 1 DESC, 2 DESC
→ Ссылка