Объединение: обновление кода значений (с помощью оператора Case, внутреннее объединение)

#sql #sql-server #sql-server-2012

#sql #sql-сервер #sql-server-2012

Вопрос:

все

У меня есть следующие коды:

 update New_Clients_Report set
YTD_Jan13 = (case   when StatementID>='01.01.2013' then 'New from Jan-13'
                    else 'Repead' end)
    from New_Clients_Report so inner join MonthSales_NC nc
on so.ClientID=nc.NewClientID and nc.NewClientDate='01.01.2013'

update New_Clients_Report set
YTD_Jan13 = (case   when StatementID>='02.01.2013' then 'New from Feb-13'
                    else 'Repead' end)
    from New_Clients_Report so inner join MonthSales_NC nc
on so.ClientID=nc.NewClientID and nc.NewClientDate='02.01.2013'

update New_Clients_Report set
YTD_Jan13 = (case   when StatementID>='03.01.2013' then 'New from Mar-13'
                    else 'Repead' end)
    from New_Clients_Report so inner join MonthSales_NC nc
on so.ClientID=nc.NewClientID and nc.NewClientDate='03.01.2013'
  

И так далее до 05.01.2014

Код работает хорошо, если я работаю отдельно.

добавьте информацию: 1) «Новое с 14 января» для тех клиентов, которые работают с нами с января 2014 года; 2) «Новое с 14 февраля» для тех клиентов, которые работают с нами с февраля 2014 года; 3) «Новое с 14 марта» для тех клиентов, которыеработают с нами с марта 2014 года

Я хочу объединить этот код в один, заранее спасибо

Ответ №1:

Если вы рассматриваете «Новое с 14 января» для тех клиентов, которые работают с января 2014 года, а также если их StatementID больше, чем январь 2014 года, тогда вы можете написать инструкцию update как:

 update New_Clients_Report set
YTD_Jan13 = (case   when StatementID>=NewClientDate then 'New from ' 
               REPLACE(RIGHT(CONVERT(VARCHAR(9), NewClientDate, 6), 6), ' ', '-')
             else 'Repead' end)
from New_Clients_Report so inner join MonthSales_NC nc
on so.ClientID=nc.NewClientID 
--and nc.NewClientDate='01.01.2013'
  

Проверьте демонстрацию здесь.