[英]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.