我目前有一个查询进入库存表(服务器),过滤哪些是“开发人员”,并从审计相关表中生成不同用户的列表。基本上,试图找出谁可以访问此特定库存中的开发服务器。
一切正常,直到我添加第二行,我在下面的代码中注释掉了这一行:
select distinct tAudit.[USER_ID]
--, count(tAudit.[USER_ID]) AS [USER_COUNT]
from table_audit as tAudit
where tAudit.inst_name IN (
SELECT (SUBSTRING([Computer Name],0,CHARINDEX('.',[Computer Name],0))) AS INST_NAME
FROM table_server_inventory
WHERE [SQL Server Edition] = 'Developer'
)
order by tAudit.user_id asc
所以,问题是:我如何计算特定用户出现的次数?我使用不同的事实是否存在冲突?我制作了另一个问题,纯粹是为了看看我是否在正确的轨道上。这是一个例子:
select tAudit.[USER_ID]
, count(tAudit.[USER_ID]) AS [USER_COUNT]
from table_audit as tAudit
where tAudit.user_id IN ('user_001', 'user_009', 'user_199', 'user_222')
group by tAudit.user_id
它看起来像这样:
USER_ID USER_COUNT
user_001 5
user_009 32
user_199 14
user_222 8
理想情况下,当主要查询正在运行时,它看起来就像上面的示例,只有几十个结果。
注意:table_audit实际上非常大,每次都会列出服务器和用户。例如:
COMPUTER_NAME USER_ID
serverAA user_001
serverAA user_009
serverAA user_199
serverAA user_222
serverBB user_001
serverBB user_009
serverCC user_001
serverCC user_199
serverCC user_222
答案 0 :(得分:2)
您只需要GROUP BY
个查询,而不是SELECT DISTINCT
:
select tAudit.[USER_ID], count(tAudit.[USER_ID]) AS [USER_COUNT]
from table_audit as tAudit
where tAudit.inst_name IN (
SELECT (SUBSTRING([Computer Name],0,CHARINDEX('.',[Computer Name],0))) AS INST_NAME
FROM table_server_inventory
WHERE [SQL Server Edition] = 'Developer'
)
group by tAudit.[USER_ID]
order by tAudit.user_id asc