基于sql server中的另一列从列中选择子字符串

基于sql server中的另一列从列中选择子字符串,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我正试图根据UserCountry列从Country列获取子字符串 这是基于我的查询的当前输出 现在我想要的是,如果userCountry列的值是Singapore,那么In-country列应该只有Singapore 因此,我在country列中对这2个结果的预期输出应该是 第一排:新加坡 第二排:马来西亚 国家/地区列具有分隔的值 这是我的问题 select PU.Email,PUC.DisplayName UserCountry ,STUFF((SELECT ',' + I

我正试图根据UserCountry列从Country列获取子字符串

这是基于我的查询的当前输出

现在我想要的是,如果userCountry列的值是Singapore,那么In-country列应该只有Singapore

因此,我在country列中对这2个结果的预期输出应该是

  • 第一排:新加坡
  • 第二排:马来西亚
国家/地区列具有分隔的值

这是我的问题

select PU.Email,PUC.DisplayName UserCountry
    ,STUFF((SELECT  ',' + IIF(C.DisplayName IS NOT NULL,C.DisplayName,CTC.TargetingId)
            FROM CampaignTargeting CTC
            LEFT JOIN  Country C On CTC.TargetingId = C.Id
            WHERE CTC.CampaignId =Camp.Id and CTC.TypeName='Country'
        FOR XML PATH('')), 1, 1, '') AS Country 
    ,STUFF((SELECT  ',' + IIF(P.DisplayName IS NOT NULL, P.DisplayName,CTP.TargetingId)
            FROM  CampaignTargeting CTP
            LEFT JOIN Profession P On CTP.TargetingId = P.Id
            WHERE  CTP.CampaignId =Camp.Id and CTP.TypeName='Profession'
        FOR XML PATH('')), 1, 1, '') AS Profession
    ,STUFF((SELECT  ',' + IIF(S.DisplayName IS NOT NULL, S.DisplayName,CTS.TargetingId)
            FROM CampaignTargeting CTS
            LEFT JOIN Specialty S On CTS.TargetingId = S.Id
            WHERE CTS.CampaignId =Camp.Id and CTS.TypeName='Specialty'
        FOR XML PATH('')), 1, 1, '') AS Specialty
    ,STUFF((SELECT  ',' + IIF(SS.DisplayName IS NOT NULL,SS.DisplayName,CTSS.TargetingId)
            FROM CampaignTargeting CTSS 
            LEFT JOIN SubSpecialty SS  On CTSS.TargetingId = SS.Id 
            WHERE CTSS.CampaignId =Camp.Id and CTSS.TypeName='SubSpecialty' 
        FOR XML PATH('')), 1, 1, '') AS SubSpecialty
 FROM Campaign Camp
    LEFT JOIN PointsTransaction PT ON PT.ReferenceId=Camp.Id and PT.Points > 0
    LEFT JOIN PointUser PU ON PU.Id=PT.PointUserId
    LEFT JOIN Country PUC on PU.CountryId=PUC.Id
 WHERE Camp.Id='8bd948c9-a597-480b-8772-815f2b31c850'
 GROUP BY Camp.Id,PU.Email,PUC.DisplayName

我使用的是MS SQL server 2012。

如果两者需要相同,则可以直接在Country列中使用UserCountry列值,而不是查找子字符串。希望有帮助。

只需使用
案例
语句:

SELECT . . . ,
       (CASE WHEN PUC.DisplayName = 'Singapore' THEN 'Singapore'
             ELSE STUFF((SELECT  ',' + IIF(C.DisplayName IS NOT NULL,C.DisplayName, CTC.TargetingId)
                         FROM CampaignTargeting CTC LEFT JOIN
                              Country C 
                              ON CTC.TargetingId = C.Id
                         WHERE CTC.CampaignId = Camp.Id and CTC.TypeName = 'Country'
                         FOR XML PATH('')
                        ), 1, 1, ''
                       )
        END) AS Country,
       . . . 

那么,为什么要直接使用Stuff语句,使用Country列作为用户Country@amitplease在提问时避免拍照呢。这里,我有一个网络问题。所以你失去了特别的答案。让我们知道你的IP地址。同样的,我们已经在@aparna上发布了评论