简体   繁体   English

SQL:仅组仅显示1个成员级别

[英]SQL: Only Group to only display 1 Membership Level

select 
u.Resnet_Agent_ID,
u.First_Name + ' ' + u.Last_Name AS [Agent Name],
u.Email,
[Current Membership Level] = CASE 
 WHEN u.UserMembershiptType_CodeID = 1 THEN 'Standard'
 WHEN u.UserMembershiptType_CodeID = 2 THEN 'Premium Membership'
 WHEN u.UserMembershiptType_CodeID = 3 THEN 'Pro Plus Membership'
 WHEN u.UserMembershiptType_CodeID = 4 THEN 'Pro Plus Trial'
 WHEN u.UserMembershiptType_CodeID = 5 THEN 'Premium Free Trial'
 WHEN u.UserMembershiptType_CodeID = 6 THEN 'Pro'
 WHEN u.UserMembershiptType_CodeID = 7 THEN 'Pro Plus Comp - Trial'
 ELSE NULL END,
[Prior Paid Membership Level] = CASE
 WHEN mh.MembershipType_CodeID = 2 THEN 'Premium Membership'
 WHEN mh.MembershipType_CodeID = 3 THEN 'Pro Plus Membership'
 WHEN mh.MembershipType_CodeID = 4 THEN 'Pro Plus Trial'
 WHEN mh.MembershipType_CodeID = 5 THEN 'Premium Free Trial'
 WHEN mh.MembershipType_CodeID = 6 THEN 'Pro'
 WHEN mh.MembershipType_CodeID = 7 THEN 'Pro Plus Comp - Trial'
 ELSE NULL END, mh.Description 
  from amp.dbo.tbl_User u (nolock)
join amp.dbo.tbl_MembershipHistoryNew mh (nolock)
    on u.UniversalUserId = mh.AgentUniversalUserId
where u.IsAgent = 1 and mh.MembershipType_CodeID <> 1

在此处输入图片说明

How can I group the Current Membership Level to only display "one current membership level, only one Resnet_Agent_ID, only one Agent Name, only one Email" ? 如何将“当前成员资格级别”分组以仅显示“一个当前成员资格级别,仅一个Resnet_Agent_ID,仅一个代理名称,仅一个电子邮件”?

One option is using cross apply() to get the latest row based on some column, eg ExpirationDate: 一种选择是使用cross apply()根据某一列获取最新行,例如ExpirationDate:

select 
    u.Resnet_Agent_id
  , [Agent Name]= u.First_Name + ' ' + u.Last_Name
  , u.Email
  , [Current Membership Level] = case 
     when u.UserMembershiptType_Codeid = 1 then 'Standard'
     when u.UserMembershiptType_Codeid = 2 then 'Premium Membership'
     when u.UserMembershiptType_Codeid = 3 then 'Pro Plus Membership'
     when u.UserMembershiptType_Codeid = 4 then 'Pro Plus Trial'
     when u.UserMembershiptType_Codeid = 5 then 'Premium Free Trial'
     when u.UserMembershiptType_Codeid = 6 then 'Pro'
     when u.UserMembershiptType_Codeid = 7 then 'Pro Plus Comp - Trial'
    else null end
  , [Prior Paid Membership Level] = case
     when mh.MembershipType_Codeid = 2 then 'Premium Membership'
     when mh.MembershipType_Codeid = 3 then 'Pro Plus Membership'
     when mh.MembershipType_Codeid = 4 then 'Pro Plus Trial'
     when mh.MembershipType_Codeid = 5 then 'Premium Free Trial'
     when mh.MembershipType_Codeid = 6 then 'Pro'
     when mh.MembershipType_Codeid = 7 then 'Pro Plus Comp - Trial'
     else null end
  , mh.Description 
from amp.dbo.tbl_User u (nolock)
  cross apply (
    select top 1 
        MembershipType_Codeid
      , Description
    from amp.dbo.tbl_MembershipHistoryNew i (nolock)
    where u.UniversalUserId = i.AgentUniversalUserId
    order by i.ExpirationDate desc /* order by to get the latest first here */
    ) mh
where u.IsAgent = 1 
  and mh.MembershipType_Codeid <> 1

Its unclear if you want to include or exclude members that have a code as null. 目前尚不清楚您是否要包含或排除代码为null的成员。 if you want nulls then use: and (mh.MembershipType_Codeid <> 1 or mh.MembershipType_Codeid is null) otherwise use: and (mh.MembershipType_Codeid <> 1 or mh.MembershipType_Codeid not null) 如果要为空,则使用:和(mh.MembershipType_Codeid <> 1或mh.MembershipType_Codeid为null),否则使用:和(mh.MembershipType_Codeid <> 1或mh.MembershipType_Codeid不为null)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM