Sql 如何从管道分隔的列中获取所有不同的数据

Sql 如何从管道分隔的列中获取所有不同的数据,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我正在使用下面的查询来获取数据 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.S

我正在使用下面的查询来获取数据

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)
我得到的输出如下

需要获得如下所示分隔的不同结果集管道

9856235687|test@Testing.com|698754321|Prakash@gmail.com|123121212

MsgAddress列有多个条目。

可能是这样的

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

也尝试过这种类型的语法SELECT ISNULL(CONVERT(VARCHAR(MAX)、NMA.MsgAddress)、“”“+”ISNULL(CONVERT(VARCHAR(MAX)、CC.VoiceNum)、“”“+”ISNULL(CONVERT(VARCHAR(MAX)、CC.BusNum)、“”)+”ISNULL(CONVERT(VARCHAR(MAX)、CC.FaxNum)、“”“+”ISNULL(CONVERT(VARCHAR(MAX)、CC.EmerPhone)、“”“+”ISNULL(CONVERT(CONVERT(VARCHAR(MAX)、CC.EmerPhone)、“”“)+”ISNULL(CONVERT(VARCHAR(MAX)、CC.Email)、“”)+“|”+ISNULL(CONVERT(VARCHAR(MAX),CC.PagerNum),”),但这仍然提供了两个记录集,其中我只需要一个具有唯一值的记录集。是否可以修改上述查询以根据可用值显示如下结果?R1。如果所有值都存在,则上述查询工作正常。R2。如果MsgAddress值不可用,则只需显示其余值,即PagerNum | Email | VoiceNum R3。如果仅存在MsgAddress值,则只需显示值9856235687|test@Testing.comAwesome非常感谢@Vigneshc能否根据可用值修改上述查询以显示以下结果?R1。如果所有值都存在,则上述查询工作正常。R2。如果MsgAddress值不可用,则只需显示其余值,即PagerNum | Email | VoiceNum R3。如果仅存在MsgAddress值,则只需显示值9856235687|test@Testing.com