Как обновить поле, используя подзапрос с псевдонимами - PullRequest
1 голос
/ 18 октября 2019

У меня есть запрос на обновление, который поможет мне обновить определенное поле, и сейчас он выдает ошибку в последних двух строках кода, где упоминается столбец d.column. Кто-нибудь знает, как я все еще могу использовать поля d.column в конце или знаю обходной путь, который даст те же результаты? Помощь очень ценится. Ошибка, где я использую d.LastUpdateSchedule и d.Due_Dte в последних двух строках кода.

   update ods.Customer
  set NumberTPD = a.NumberCode
  from ods.Customer r
  left join
   (
Select d.CustomerNumber
    , d.due_Dte
    , l.NumberCode
     from (select r.CustomerNumber
       , r.due_Dte
        , r.NumberTPD
        , max(l.UpdateSchedule) as LastUpdateSchedule
      from ods.Customer r
        left join ods.CustomerHistory l
         on r.CustomerNumber = l.CustomerNumber
         and r.due_Dte >= l.UpdateSchedule
         and l.Examine = 1 
         and r.ExamineFrequency in ('MONTHLY','MNTHLYLDAY')
         and isnull(r.ScheduleEndDate,'1970-01-01') < r.due_Dte
        group by r.CustomerNumber, r.Due_Dte, r.NumberTPD) d
   left join ods.CustomerHistory l
   on d.CustomerNumber = l.CustomerNumber
  and d.LastUpdateSchedule = l.UpdatedSchedule
) a
     on r.CustomerNumber = a.CustomerNumber
     and r.Due_Dte = a.Due_Dte
       where d.Due_Dte > '2018-08-03'
      and d.LastUpdateSchedule is not null

Ответы [ 2 ]

1 голос
/ 18 октября 2019

это потому, что ваш table d находится внутри вашего table a, переместите предложение where в table d

update ods.Customer
set NumberTPD = a.NumberCode
from ods.Customer r
left join
    (Select d.CustomerNumber
        , d.due_Dte
        , l.NumberCode

    from 
        (select r.CustomerNumber
            , r.due_Dte
            , r.NumberTPD
            , max(l.UpdateSchedule) as LastUpdateSchedule
        from ods.Customer r
        left join ods.CustomerHistory l on r.CustomerNumber = l.CustomerNumber
            and r.due_Dte >= l.UpdateSchedule
            and l.Examine = 1 
            and r.ExamineFrequency in ('MONTHLY','MNTHLYLDAY')
            and isnull(r.ScheduleEndDate,'1970-01-01') < r.due_Dte
        group by r.CustomerNumber, r.Due_Dte, r.NumberTPD) d
    left join ods.CustomerHistory l on d.CustomerNumber = l.CustomerNumber
        and d.LastUpdateSchedule = l.UpdatedSchedule
    where d.Due_Dte > '2018-08-03'
    and d.LastUpdateSchedule is not null
    ) a on r.CustomerNumber = a.CustomerNumber
            and r.Due_Dte = a.Due_Dte
0 голосов
/ 18 октября 2019
-- only what you need

UPDATE cust
SET cust.NumberTPD = histRow.NumberCode
FROM ods.Customer cust
JOIN
  (SELECT c.CustomerNumber,
          max(h.UpdateSchedule) AS LastUpdateSchedule
   FROM ods.Customer c
   JOIN ods.CustomerHistory h ON c.CustomerNumber = h.CustomerNumber
   AND c.due_Dte >= h.UpdateSchedule
   WHERE c.Due_Dte > '2018-08-03'
     AND c.ExamineFrequency IN ('MONTHLY',
                                'MNTHLYLDAY')
     AND isnull(c.ScheduleEndDate, '1970-01-01') < c.due_Dte --sure about this?

     AND h.Examine = 1
   GROUP BY c.CustomerNumber) maxes
JOIN ods.CustomerHistory histRow ON maxes.CustomerNumber = histRow.CustomerNumber
AND maxes.LastUpdateSchedule = histRow.UpdatedSchedule
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...