0

私はこのテーブルでSQL Server 2008を使用しています: ここに画像の説明を入力

そして私は次のクエリを持っています:

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

どうすればこれを達成できますか?

4

1 に答える 1

0

回答は、Chris Bednarski によってコメントとして投稿されました。

COUNT(呼び出された) OVER (PARTITION BY が呼び出された) を試す

これがうまくいきました。

于 2012-12-04T10:37:27.403 に答える