SQL выбирает значение столбца как пользовательское имя

Я пытаюсь вытащить данные в новый столбец, если другой столбец равен определенному значению.

Мои данные представляют собой разные телекоммуникационные значения, хранящиеся в том же столбце, с другим столбцом дескриптора, указывающим, является ли это адресом электронной почты или домашним телефоном, мобильным телефоном и т. д. Я хочу поместить электронную почту в столбец электронной почты, домашний телефон в столбец домашнего телефона и мобильный телефон в свой собственный колонка и т.д.

Я начал с CASE, но не знаю, как расширить его, чтобы использовать значение во втором столбце:

select TOP 20 
    BF.fileID,  
    PT.Patient_DateOfBirth as DOB, 
    ContactType = 
        CASE CONT.Patient_Telecom_Use
            WHEN 'EM' THEN 'Email'
            WHEN 'HP' THEN 'HomePh'
            ELSE 'otherContact'
        END 
-- 'EM' is email, 'HP' is home phone, etc, need to figure out how to select CONT.Patient_Telecom_value into 'email' etc
    from  
        [BaseFile] BF  
    INNER JOIN [Patient] as PT 
        ON  BF.[fileId] = PT.[FileId]
    INNER JOIN [PatientTelecomunication] as CONT
        ON BF.[fileId] = CONT.[FileId]

Если бы я писал это как гипотетическое утверждение IF-THAN, я бы сказал:

IF 
Patient_Telecom_Use='EM' 
THEN select Patient_Telecom_value as 'email'

Спасибо!


person Chris    schedule 03.11.2020    source источник


Ответы (1)


Кажется, вам нужна условная агрегация. Логика состоит в том, чтобы переместить условные выражения в агрегатных функциях для каждого столбца в сводку и поместить другие столбцы в предложение GROUP BY, например так:

select TOP (20)
    BF.fileID,  
    PT.Patient_DateOfBirth as DOB, 
    MAX(CASE WHEN CONT.Patient_Telecom_Use = 'EM' THEN CONT.Patient_Telecom_value END) as Email,
    MAX(CASE WHEN CONT.Patient_Telecom_Use = 'HP' THEN CONT.Patient_Telecom_value END) as HomePh
FROM [BaseFile] BF  
INNER JOIN [Patient] as PT ON  BF.[fileId] = PT.[FileId]
INNER JOIN [PatientTelecomunication] as CONT ON BF.[fileId] = CONT.[FileId]
GROUP BY BF.fileID,  PT.Patient_DateOfBirth
person GMB    schedule 03.11.2020
comment
Благодарю вас! Я буду читать о MAX (CASE - требование использовать GROUP BY для всех элементов для меня не интуитивно понятно - я бы не попал туда через поиск :-) - person Chris; 03.11.2020