Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:盘点库存问题(带子查询)_Sql_Sql Server_Database_Subquery_Reporting - Fatal编程技术网

SQL Server:盘点库存问题(带子查询)

SQL Server:盘点库存问题(带子查询),sql,sql-server,database,subquery,reporting,Sql,Sql Server,Database,Subquery,Reporting,我目前有一个查询,它将进入(服务器的)库存表,过滤哪些是“开发人员”,并从审计相关表中生成不同用户的列表。基本上,试图找出谁可以访问这个特定清单中的开发服务器 在我添加第二行之前,一切正常,我在下面的代码中注释掉了第二行: select distinct tAudit.[USER_ID] --, count(tAudit.[USER_ID]) AS [USER_COUNT] from table_audit as tAudit where tAudit.inst_name IN

我目前有一个查询,它将进入(服务器的)库存表,过滤哪些是“开发人员”,并从审计相关表中生成不同用户的列表。基本上,试图找出谁可以访问这个特定清单中的开发服务器

在我添加第二行之前,一切正常,我在下面的代码中注释掉了第二行:

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
所以,问题是:我如何计算某个特定用户出现的次数?与我使用的distinct有冲突吗?我提出了另一个问题,纯粹是想看看我是否走上了正确的道路。这是一个例子:

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
理想情况下,当主查询工作时,它将与上面的示例类似,只是有几十个以上的结果

注意:表_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

您只需要一个
分组依据
查询,而不是
选择不同的

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

您只需要一个
分组依据
查询,而不是
选择不同的

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

你的第二个问题是正确的。COUNT是一个聚合函数,需要第一个查询中缺少的GROUP BY子句。我已尝试在第一个查询中添加GROUP BY子句,我的逻辑和位置必须为off。我只想像在第二个查询中那样手动列出所有用户,但是有将近200个。此外,该列表有点动态——可能在一周内发生变化。GROUP BY在WHERE之后和ORDER BY之前。你能用你尝试过的分组发布第一个查询吗?仅供参考,你可以把
DISTINCT
看作是一个退化/简化的
分组。这是一条没有所有功能的捷径。令人钦佩的是,我将参考下面Gordon Linoff的回答,因为他拿出了DISTINCT,并让我在ORDER BY和before WHERE之前加入GROUP BY。但是,正如我在那里提到的,它包括用户出现在表中的总次数。我正在寻找的计数只为开发人员服务器。我有一个用户返回,可以访问1804台服务器,这。。。超过了开发人员服务器的数量。哎呀!你的第二个问题是正确的。COUNT是一个聚合函数,需要第一个查询中缺少的GROUP BY子句。我已尝试在第一个查询中添加GROUP BY子句,我的逻辑和位置必须为off。我只想像在第二个查询中那样手动列出所有用户,但是有将近200个。此外,该列表有点动态——可能在一周内发生变化。GROUP BY在WHERE之后和ORDER BY之前。你能用你尝试过的分组发布第一个查询吗?仅供参考,你可以把
DISTINCT
看作是一个退化/简化的
分组。这是一条没有所有功能的捷径。令人钦佩的是,我将参考下面Gordon Linoff的回答,因为他拿出了DISTINCT,并让我在ORDER BY和before WHERE之前加入GROUP BY。但是,正如我在那里提到的,它包括用户出现在表中的总次数。我正在寻找的计数只为开发人员服务器。我有一个用户返回,可以访问1804台服务器,这。。。超过了开发人员服务器的数量。哎呀!这是在正确的轨道上!您提到的分组方式和不使用SELECT DISTINCT是有道理的。但是,为[USER_COUNT]提取的数字是该特定用户在表_audit total中出现的次数,而不是仅为“开发者”结果出现的次数。如何针对特定情况修改此选项?@Erik。由于
where
子句,这应该只计算用户标记为开发人员的行。这是正确的!您提到的分组方式和不使用SELECT DISTINCT是有道理的。但是,为[USER_COUNT]提取的数字是该特定用户在表_audit total中出现的次数,而不是仅为“开发者”结果出现的次数。如何针对特定情况修改此选项?@Erik。由于
where
子句,这应该只计算将用户标记为开发人员的行。