2016-07-01 2 views
2

Я использую ниже запрос, чтобы получить данныеКак получить все различные данные из столбцов трубы разделителями

SELECT NMA.MsgAddress,CC.PagerNum,CC.Email,CC.VoiceNum 
FROM [Table1] GEP (NOLOCK) 
INNER JOIN [Table2] CC (NOLOCK) 
    ON GEP.PersonID = CC.PersonID 
LEFT OUTER JOIN [Table3] NME (NOLOCK) 
    ON GEP.PAN = NME.Cardnumber 
    AND NME.Status = 2 --ACTIVE (Enrolment Status) 
INNER JOIN [Table4] NMA (NOLOCK) 
    ON NME.MsgAddressUID = NMA.MsgAddressUID 
    AND NMA.Status = 1 --ACTIVE (Address Status) 
INNER JOIN [Table5] NMAT (NOLOCK) 
    ON NMA.MsgAddressTypeUID = NMAT.MsgAddressTypeUID 
    AND NMAT.MsgAddressType IN ('MobileNumber','EMAIL') 
WHERE GEP.PAN IN (TEST) 

Вывод, который я получаю, как показано ниже

enter image description here

нуждающегося для получения отдельной строки результатов, ограниченной ниже.

9856235687|[email protected]|698754321|[email protected]|123121212 

Столбец MsgAddress - это тот, у которого есть несколько записей.

+0

также пробовал этот тип синтаксиса ВЫБРАТЬ ISNULL (CONVERT (VARCHAR (MAX), NMA.MsgAddress), '') + '|' + \t \t ISNULL (CONVERT (VARCHAR (MAX), CC.VoiceNum), '') + '|' + \t \t ISNULL (CONVERT (VARCHAR (MAX), CC.BusNum), '') + '|' + \t \t ISNULL (CONVERT (VARCHAR (MAX), CC.FaxNum), '') + '|' + \t \t ISNULL (CONVERT (VARCHAR (MAX), CC.EmerPhone), '') + '|' + \t \t ISNULL (CONVERT (VARCHAR (MAX), CC.Email), '') + '|' + \t \t ISNULL (CONVERT (VARCHAR (MAX), CC.PagerNum), '') Хотя это все еще дает два набора записей, где мне нужен только один набор записей с уникальными значениями. – Joby

+0

Можно ли изменить приведенный выше запрос, чтобы показать результаты, как показано ниже, на основе доступных значений? R1. Если все значения присутствуют, то указанный выше запрос работает потрясающе. R2. Если значение MsgAddress недоступно, оно должно просто показать остальные значения i.e PagerNum | Email | VoiceNum R3. Если присутствует только значение MsgAddress, ему просто нужно показать значение 9856235687|[email protected] – Joby

ответ

1

Может быть что-то вроде этого

WITH SomeCTE (MsgAddress,PagerNum,Email,VoiceNum) 
AS (
    SELECT NMA.MsgAddress,CC.PagerNum,CC.Email,CC.VoiceNum 
    FROM [Table1] GEP (NOLOCK) 
    INNER JOIN [Table2] CC (NOLOCK) 
     ON GEP.PersonID = CC.PersonID 
    LEFT OUTER JOIN [Table3] NME (NOLOCK) 
     ON GEP.PAN = NME.Cardnumber 
     AND NME.Status = 2 --ACTIVE (Enrolment Status) 
    INNER JOIN [Table4] NMA (NOLOCK) 
     ON NME.MsgAddressUID = NMA.MsgAddressUID 
     AND NMA.Status = 1 --ACTIVE (Address Status) 
    INNER JOIN [Table5] NMAT (NOLOCK) 
     ON NMA.MsgAddressTypeUID = NMAT.MsgAddressTypeUID 
     AND NMAT.MsgAddressType IN ('MobileNumber','EMAIL') 
    WHERE GEP.PAN IN (TEST) 
) 

SELECT STUFF((SELECT '|' + MsgAddress 
       FROM SomeCTE 
       FOR XML PATH('')) ,1,1,'') 
     + '|' + MAX(CC.PagerNum) + '|' + MAX(CC.Email) + '|' + MAX(CC.VoiceNum) As Result 
FROM SomeCTE 
GROUP BY PagerNum,Email,VoiceNum 
+1

Awesome Большое спасибо @Vignesh – Joby

+0

Можно ли изменить указанный выше запрос, чтобы показать результаты, как показано ниже, на основе доступных значений? R1. Если все значения присутствуют, то указанный выше запрос работает потрясающе. R2. Если значение MsgAddress недоступно, оно должно просто показать остальные значения i.e PagerNum | Email | VoiceNum R3. Если присутствует только значение MsgAddress, ему просто нужно показать значение 9856235687|[email protected] – Joby