如何计算当前查询中包含值的行数?

时间:2012-11-26 07:36:07

标签: sql sql-server tsql

我正在使用SQL Server 2008使用此表: enter image description here

我有以下查询:

SELECT caller, called, SUM(duration) as duration, 
      dateadd(DAY,0, datediff(day,0, time))as Batch2 ,
      CONVERT(VARCHAR(8), time, 4) AS Batch  
FROM  Calls oc
WHERE caller='somevalue'
GROUP BY called, dateadd(DAY,0, datediff(day,0, time)),
          CONVERT(VARCHAR(8), time, 4),
          caller
ORDER BY duration DESC,called

现在我想按查询中包含相同被调用值的行数来排序查询,这意味着第一个结果将是大多数日子里出现的调用。

现在我最接近的是使用:

order by (select count(called) from Calls where called=oc.called ),
         duration DESC,
         called

但是这会返回所有被调用的外观,而不是按照我的初始查询来区分值。

我不能使用OVER(),因为这只会返回一般的行数。

这是我现在输出的一个例子:

callervalue   somecalledvalue   589 2012-11-21 00:00:00.000 21.11.12
callervalue   somecalledvalue   551 2012-11-20 00:00:00.000 20.11.12
callervalue   somecalledvalue   506 2012-11-22 00:00:00.000 22.11.12

我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

答案由Chris Bednarski发表评论:

  

尝试COUNT(调用)OVER(调用PARTITION BY)

这就是诀窍。