Sql 选择子查询计数,而不是使用';和';滤波器
我有下面的查询,它运行得很好。但是,您会注意到注释行,其中我指定了一个特定的条件来过滤结果。不必取消对该行的注释,然后再次运行查询,有没有办法将该行的结果添加为一列,这样我只需运行一次Sql 选择子查询计数,而不是使用';和';滤波器,sql,sql-server,Sql,Sql Server,我有下面的查询,它运行得很好。但是,您会注意到注释行,其中我指定了一个特定的条件来过滤结果。不必取消对该行的注释,然后再次运行查询,有没有办法将该行的结果添加为一列,这样我只需运行一次 select du.USERID as 'Username', du.LIBRARYNAME as 'Home Office', count(*) as 'Documents created' from mhgroup.dochistory dh (nolock) inner join mhgroup.DO
select
du.USERID as 'Username',
du.LIBRARYNAME as 'Home Office',
count(*) as 'Documents created'
from mhgroup.dochistory dh (nolock)
inner join mhgroup.DOCMASTER dm (nolock)
on (dh.DOCNUM=dm.DOCNUM and dh.VERSION=dm.VERSION)
inner join mhgroup.DOCUSERS du (nolock)
on dh.DOCUSER=du.USERID
where (dh.activity_datetime >= dateadd(dd,-365, getutcdate()))
and du.LIBRARYNAME in ('DEN','HOU')
and dm.TYPE = 'd'
and dh.ACTIVITY = 'Create'
--and dm.C1ALIAS like '9999%'
group by du.USERID, du.LIBRARYNAME
order by count(*) desc
现在,结果如下所示:
Username Home Office Documents created
User1 HOU 1520
User2 HOU 475
User3 DEN 182
User4 DEN 54
Username Home Office Documents created Non-Billable Docs
User1 HOU 1520 500
User2 HOU 475 250
User3 DEN 182 82
User4 DEN 54 34
我想让他们看起来像这样:
Username Home Office Documents created
User1 HOU 1520
User2 HOU 475
User3 DEN 182
User4 DEN 54
Username Home Office Documents created Non-Billable Docs
User1 HOU 1520 500
User2 HOU 475 250
User3 DEN 182 82
User4 DEN 54 34
您可以将其添加为总和:
SELECT du.USERID AS 'Username'
, du.LIBRARYNAME AS 'Home Office'
, COUNT(*) AS 'Documents created'
, SUM( CASE
WHEN dm.C1ALIAS LIKE '9999%' THEN
1
ELSE
0
END
) AS [Non-Billable Docs]
FROM mhgroup.dochistory dh
(NOLOCK)
INNER JOIN mhgroup.DOCMASTER dm
(NOLOCK) ON (
dh.DOCNUM = dm.DOCNUM
AND dh.VERSION = dm.VERSION
)
INNER JOIN mhgroup.DOCUSERS du
(NOLOCK) ON dh.DOCUSER = du.USERID
WHERE (dh.activity_datetime >= DATEADD(dd, -365, GETUTCDATE()))
AND du.LIBRARYNAME IN ( 'DEN', 'HOU' )
AND dm.TYPE = 'd'
AND dh.ACTIVITY = 'Create'
GROUP BY du.USERID
, du.LIBRARYNAME
ORDER BY COUNT(*) DESC;
您可以将其添加为总和:
SELECT du.USERID AS 'Username'
, du.LIBRARYNAME AS 'Home Office'
, COUNT(*) AS 'Documents created'
, SUM( CASE
WHEN dm.C1ALIAS LIKE '9999%' THEN
1
ELSE
0
END
) AS [Non-Billable Docs]
FROM mhgroup.dochistory dh
(NOLOCK)
INNER JOIN mhgroup.DOCMASTER dm
(NOLOCK) ON (
dh.DOCNUM = dm.DOCNUM
AND dh.VERSION = dm.VERSION
)
INNER JOIN mhgroup.DOCUSERS du
(NOLOCK) ON dh.DOCUSER = du.USERID
WHERE (dh.activity_datetime >= DATEADD(dd, -365, GETUTCDATE()))
AND du.LIBRARYNAME IN ( 'DEN', 'HOU' )
AND dm.TYPE = 'd'
AND dh.ACTIVITY = 'Create'
GROUP BY du.USERID
, du.LIBRARYNAME
ORDER BY COUNT(*) DESC;
对此,可以使用带有SUM的case表达式 我要提醒你注意诺洛克。使用这种暗示几乎从来都不是一个好主意。有那么多不好的事情。不推荐使用WITH关键字作为查询提示 你可能还想看看这个
对此,可以使用带有SUM的case表达式 我要提醒你注意诺洛克。使用这种暗示几乎从来都不是一个好主意。有那么多不好的事情。不推荐使用WITH关键字作为查询提示 你可能还想看看这个