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关键字作为查询提示

你可能还想看看这个