Рекурсивный SQL (CTE)

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я хочу написать SQL-запрос, в котором в таблице есть поля OriginalDocket, Docket, DiversionDocket, которые связаны

 Declare @DespatchFrom date = '02-01-2021' 

select OriginalDocket, Docket, DiversionDocket 
from trans 
where DespatchDateTime >= @DespatchFrom
and originaldocket <> '' 
and DiversionDocket <> '' 
 

введите описание изображения здесь

Выше я хочу написать, чтобы показать, как

введите описание изображения здесь

Код для 2-го изображения:

 select t.OriginalDocket, t.Docket, t.DiversionDocket, t2.DiversionDocket as DiversionDocket2
from trans t, trans t2
where t.DespatchDateTime >= @DespatchFrom
and t.originaldocket <> '' 
and t.DiversionDocket <> '' 
and t2.OriginalDocket = t.DiversionDocket
and t2.diversiondocket <> ''
 

Комментарии:

1. Пожалуйста, не используйте изображения для данных, используйте форматированный текст.

2. Evolve — не используйте объединения в старом стиле

3. В чем ваш вопрос? У вас есть проблема (помимо ужасного использования , в FROM предложении)?

Ответ №1:

Попробуйте выполнить этот запрос:

 select 
    inner.OriginalDocket,
    outer.OriginalDocket, 
    inner.DiversionDocket, 
    outer.DiversionDocket as DiversionDocket2
from
    docketTable as inner
join
    docketTable as outer on inner.Docket = outer.OriginalDocket
where
    inner.DespatchDateTime >= @DespatchFrom
    and inner.originaldocket <> '' 
    and inner.DiversionDocket <> ''