2017-01-02 50 views
0

我想从国家列中获取子字符串,基于UserCountry列。从sql server中的另一列中选择从字段的子字符串

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

enter image description here

现在我想的是,如果userCountry列的值是新加坡然后在全国列应该只有新加坡

因此,在这些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的

+0

那么为什么要使用的东西的语句直接使用国家列如用户国家@amit – mohan111

回答

0

而不是寻找子,你可以直接使用在国家列UserCountry列值,如果两者都需要是相同的。希望能帮助到你。

+1

同已经张贴在评论@aparna – mohan111

0

只需使用一个case声明:

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, 
     . . . 
相关问题