我需要一些帮助。我想知道我的系统中这些列的激活,停用和用户总数。当前输出包括NAME列中的名称两次输出,如下所示,包括NULLS。我想消除NULL并获得每列的子总数。希望我能得到一些帮助。
Current output:
- NAME Activated Deactivated
- MAX 25 NULL
- MAX NULL 5
- TAX 40 NULL
- TAX NULL 10
Desired output:
- NAME Activated Deactivated
- MAX 25 5
- TAX 40 10
-Total 65 15
感谢。
select
case
when (upper(m.email) like '%max.com') then 'MAX'
when (upper(m.email) like '%tax.com') then 'TAX'
else 'OTHER'
end Name, count(*) 'Activated', null 'Deactivated'
from
membership.user_details d
inner join membership.aspnet_membership m
on m.userid = d.userid
inner join membership.user_notes n
on n.userid = d.userid
and n.created_on = (
select
min(created_on)
from
membership.user_notes
where
userid = n.userid
and note = 'received.'
)
and substring(convert(varchar(8),n.created_on,112),1,6) = '201209'
where
approved = 1
group by
case
when (upper(m.email) like '%max.com') then 'MAX'
when (upper(m.email) like '%tax.com') then 'TAX'
else 'OTHER'
end
union
select
case
when (upper(m.email) like '%max.com') then 'MAX'
when (upper(m.email) like '%tax.com') then 'TAX'
else 'OTHER'
end Name,
null 'Activated',
count(*) 'Deactivated'
from
membership.user_details d
inner join membership.aspnet_membership m
on m.userid = d.userid
inner join membership.user_notes n
on n.userid = d.userid
and n.CREATED_ON = (
select
min(created_on)
from
membership.user_notes
where
userid = n.userid
and note = 'SAAR received.'
)
and substring(convert(varchar(8),m.LastLockoutDate,112),1,6) = '201209'
where
approved = 1
group by
case
when (upper(m.email) like '%max.com') then 'MAX'
when (upper(m.email) like '%tax.com') then 'TAX'
else 'OTHER'
end
答案 0 :(得分:0)
分别将null 'Deactivated'
和null 'Activated'
更改为0'Deactivated'
和0'Activated'
,然后执行GROUP BY Name WITH ROLLUP
答案 1 :(得分:0)
您应该能够将其合并为一个SELECT
:
select
case
when (upper(m.email) like '%max.com') then 'MAX'
when (upper(m.email) like '%tax.com') then 'TAX'
else 'OTHER'
end Name,
SUM(case when substring(convert(varchar(8),n.created_on,112),1,6) = '201209' then 1 else 0 end) 'Activated',
SUM(case when substring(convert(varchar(8),m.LastLockoutDate,112),1,6) = '201209' then 1 else 0 end) 'Deactivated'
from membership.user_details d
inner join membership.aspnet_membership m
on m.userid = d.userid
inner join membership.user_notes n
on n.userid = d.userid
and n.CREATED_ON = (select min(created_on)
from membership.user_notes
where userid = n.userid
and note = 'SAAR received.')
where approved = 1
group by case when (upper(m.email) like '%max.com') then 'MAX'
when (upper(m.email) like '%tax.com') then 'TAX'
else 'OTHER' end
此新版本使用带有CASE
表达式的聚合函数来获取总Activated
和Deactivated
。 CASE
检查每个查询使用的日期。
然后,如果要包含总行,可以使用GROUP BY with ROLLUP