Передать регистр, когда переменная в другой регистр - PullRequest
0 голосов
/ 13 мая 2019

У меня следующий запрос, я хотел бы привести его в порядок, передав isMatchingNameEmail во второй случай, когда

моя конечная цель - найти соответствующий referenceID по следующей логике:

вернуть referenceID базы данных если что-то совпадает по имени и адресу электронной почты, если нет, то попробуйте найти его по имени и номеру мобильного телефона, если не вернуть пустое значение

просто хочу посмотреть, есть ли лучший способ сделать это. спасибо, ребята!

    select r.*,
    L.U3L_ReferenceID ReferenceID,
    case when L.U3L_ReferenceID is null then
        (select L.U3L_ReferenceID from [u3_data].[data].[ListData_e0a27] [L]
        where r.given_name = L.firstname and r.email = L.emailaddress)
        end isMatchingNameEmail,
    -- when record is not found and isMatchingNameEmail is null
    case when L.U3L_ReferenceID is null
        and (select top 1 L.U3L_ReferenceID from [u3_data].[data].[ListData_e0a27] [L]
        where r.given_name = L.firstname and r.email = L.emailaddress) is null
        then
        (select L.U3L_ReferenceID from [u3_data].[data].[ListData_e0a27] [L]
        where 
        r.given_name = L.firstname and
            (replace(
            replace( 
            replace(
            replace(r.mobilephone
                    ,' ','')
                    ,'(','')
                    ,')','')
                    ,'+','') = L.mobilenumber or
            replace(
            replace( 
            replace(
            replace(r.mobilephone
                    ,' ','')
                    ,'(','')
                    ,')','')
                    ,'+','') = stuff(L.mobilenumber,1,2,'0') or
            replace(
            replace( 
            replace(
            replace(r.mobilephone
                    ,' ','')
                    ,'(','')
                    ,')','')
                    ,'+','') = L.mobilenumber))
        end isMatchingNameMobile
    from @Records r
    left Join [u3_data].[data].[ListData_e0a27] [L] with(nolock) on
    [r].Id = [L].userid

1 Ответ

0 голосов
/ 13 мая 2019

с использованием CTE

; with 
cte1 as
(
    select col1, col2, <query expression> as col3 from yourtable
),
cte2 as
(
    select col1, col2, col3, col3 * 4 as col4 from cte1
)
select col1, col2, col3, col4 
from   cte2

с использованием производной таблицы

select col1, col2, col3, col4
from
(
     select col1, col2, col3, col3 * 4 as col4
     from
     (
         select col1, col3, <query expression> as col3 from yourtable
     ) as d
) as d

с помощью оператора apply

select t.col1, t.col2, a3.col3, a4.col4
from   yourtable t
       cross apply
       (
            select <query expression> as col3
       ) a1
       cross apply
       (
            select col3 * 4 as col4
       ) a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...