Sql Server连接到子查询
我有一个带有呼叫记录的SQL Server表,我想得到总呼叫数和总应答呼叫数 下面是该表的外观:Sql Server连接到子查询,sql,sql-server,Sql,Sql Server,我有一个带有呼叫记录的SQL Server表,我想得到总呼叫数和总应答呼叫数 下面是该表的外观: Extension | Status ----------------------- 300 Answered 200 Not Answered .... ... 编写查询以返回分机名、总呼叫数(整个表中的计数)和已应答呼叫数(count whereStatus='responsed')的最有效方法是什么 我创建了一个子查询并加入它,但它似乎有点低
Extension | Status
-----------------------
300 Answered
200 Not Answered
.... ...
编写查询以返回分机名、总呼叫数(整个表中的计数)和已应答呼叫数(count whereStatus='responsed'
)的最有效方法是什么
我创建了一个子查询并加入它,但它似乎有点低效,所以我
SELECT Extension, COUNT(*) AS total, answered.num as totalAnswered
FROM calls c INNER JOIN (SELECT Extension, COUNT(*) AS num FROM calls
WHERE Status = 'answered') answered ON c.Extension = answered.Extension
GROUP BY Extension, answered.num
谢谢
您可以使用windows函数来实现这一点。应该很好用
您可以使用windows函数来实现这一点。应该很好用
您可以使用windows函数来实现这一点。应该很好用
您可以使用windows函数来实现这一点。应该可以正常工作。通过使用
计数
聚合函数中的case
语句来计算总接听电话数,您可以使用分组方式使查询非常简单
select extension,
count(*) as total,
count(case when status = 'answered' then 'X' end) as totalAnswered
from calls
group by extension
我假设您正在尝试返回每个扩展的总数
编辑
我必须承认,你目前的帖子并不是100%清楚你的意图。您发布的查询意味着您希望计数为每个扩展。如果是这样,那么上面的查询将非常有效
但是在你的帖子里你说:
呼叫总数(计入整个表)
。。。这似乎暗示了一些不同的东西:您不希望每个扩展的计数都相同
为了完整性起见,如果希望计数对整个表是全局的,而不是每个扩展,可以使用以下查询:
而且,如果出于某种原因,您需要这两种计数的组合,那么您可以使用如下内容:
select extension,
count(*) as totalPerExtension,
count(case when status = 'answered' then 'X' end) as totalAnsweredPerExtension,
totalGlobal,
totalAnsweredGlobal
from (select *,
count(*) over () as totalGlobal,
count(case when status = 'answered' then 'X' end) over () as totalAnsweredGlobal
from calls) c
group by extension, totalGlobal, totalAnsweredGlobal
通过使用count
聚合函数中的case
语句,您可以使用groupby
使查询非常简单
select extension,
count(*) as total,
count(case when status = 'answered' then 'X' end) as totalAnswered
from calls
group by extension
我假设您正在尝试返回每个扩展的总数
编辑
我必须承认,你目前的帖子并不是100%清楚你的意图。您发布的查询意味着您希望计数为每个扩展。如果是这样,那么上面的查询将非常有效
但是在你的帖子里你说:
呼叫总数(计入整个表)
。。。这似乎暗示了一些不同的东西:您不希望每个扩展的计数都相同
为了完整性起见,如果希望计数对整个表是全局的,而不是每个扩展,可以使用以下查询:
而且,如果出于某种原因,您需要这两种计数的组合,那么您可以使用如下内容:
select extension,
count(*) as totalPerExtension,
count(case when status = 'answered' then 'X' end) as totalAnsweredPerExtension,
totalGlobal,
totalAnsweredGlobal
from (select *,
count(*) over () as totalGlobal,
count(case when status = 'answered' then 'X' end) over () as totalAnsweredGlobal
from calls) c
group by extension, totalGlobal, totalAnsweredGlobal
通过使用count
聚合函数中的case
语句,您可以使用groupby
使查询非常简单
select extension,
count(*) as total,
count(case when status = 'answered' then 'X' end) as totalAnswered
from calls
group by extension
我假设您正在尝试返回每个扩展的总数
编辑
我必须承认,你目前的帖子并不是100%清楚你的意图。您发布的查询意味着您希望计数为每个扩展。如果是这样,那么上面的查询将非常有效
但是在你的帖子里你说:
呼叫总数(计入整个表)
。。。这似乎暗示了一些不同的东西:您不希望每个扩展的计数都相同
为了完整性起见,如果希望计数对整个表是全局的,而不是每个扩展,可以使用以下查询:
而且,如果出于某种原因,您需要这两种计数的组合,那么您可以使用如下内容:
select extension,
count(*) as totalPerExtension,
count(case when status = 'answered' then 'X' end) as totalAnsweredPerExtension,
totalGlobal,
totalAnsweredGlobal
from (select *,
count(*) over () as totalGlobal,
count(case when status = 'answered' then 'X' end) over () as totalAnsweredGlobal
from calls) c
group by extension, totalGlobal, totalAnsweredGlobal
通过使用count
聚合函数中的case
语句,您可以使用groupby
使查询非常简单
select extension,
count(*) as total,
count(case when status = 'answered' then 'X' end) as totalAnswered
from calls
group by extension
我假设您正在尝试返回每个扩展的总数
编辑
我必须承认,你目前的帖子并不是100%清楚你的意图。您发布的查询意味着您希望计数为每个扩展。如果是这样,那么上面的查询将非常有效
但是在你的帖子里你说:
呼叫总数(计入整个表)
。。。这似乎暗示了一些不同的东西:您不希望每个扩展的计数都相同
为了完整性起见,如果希望计数对整个表是全局的,而不是每个扩展,可以使用以下查询:
而且,如果出于某种原因,您需要这两种计数的组合,那么您可以使用如下内容:
select extension,
count(*) as totalPerExtension,
count(case when status = 'answered' then 'X' end) as totalAnsweredPerExtension,
totalGlobal,
totalAnsweredGlobal
from (select *,
count(*) over () as totalGlobal,
count(case when status = 'answered' then 'X' end) over () as totalAnsweredGlobal
from calls) c
group by extension, totalGlobal, totalAnsweredGlobal
我相信总数也需要包括未回答的项目。也许你是对的。如果是这样的话,你的答案是正确的。我相信总数也需要包括未回答的项目。也许你是对的。如果是这样的话,你的答案是正确的。我相信总数也需要包括未回答的项目。也许你是对的。如果是这样的话,你的答案是正确的。我相信总数也需要包括未回答的项目。也许你是对的。如果是这样的话,你的答案是正确的。几个细节:1)你发布的查询无效。考虑修理它。2) 您的查询似乎暗示您希望计数为每个扩展,但在文本中,您似乎希望计数基于整个表。是哪一个?几个细节:1)你发布的查询无效。考虑修理它。2) 您的查询似乎暗示您希望计数为每个扩展,但在文本中,您似乎希望计数基于整个表。是哪一个?几个细节:1)你发布的查询无效。考虑修理它。2) 您的查询似乎暗示您希望计数为每个扩展,但在文本中,您似乎希望计数基于整个表。是哪一个?一对