1

次のデータセットを返すクエリがあります。

デバイス| サービス
--------------------------------
PC1 | サービス1
PC1 | サービス2
PC1 | サービス3
PC1 | Service4
PC1 | サービス5
PC1 | サービス6
PC1 | サービス7
PC2 | サービス1
PC2 | サービス2

レポートには、デバイスごとにグループ化され、サービスも表示されるテーブルがあります。ただし、最も一般的な5つのサービスを示す円グラフも必要です。

2番目のデータセットとストアドプロシージャを使用してこれをかなり簡単に行うことができましたが、代わりにこの同じデータセットを使用してそれを行う方法があるかどうか疑問に思いました(データはすでにクエリされて返されているので、そうなるようですサーバーに対して別のプロシージャを実行するよりもパフォーマンスが向上します)。

これが可能かどうかについて何か考えはありますか?または、2番目のクエリ/ストアドプロシージャを使用する必要がありますか?

4

2 に答える 2

0

COUNT(*)OVERグループごとのカウントを取得し、TOP 5のみを表示したいとします。CTEはとで使用できますDENSE_RANK()OVER

WITH CTE AS
(
  SELECT Device, Service
   , COUNT(Service) OVER (PARTITION BY Device) AS Count
   , DENSE_RANK() OVER (PARTITION BY Device ORDER BY Service) AS Rank
  FROM tdevice
)
SELECT Count, Rank, Device, Service
FROM CTE
WHERE RANK <= 5

これがフィドルです:http ://sqlfiddle.com/#!3/1f42a/8/

于 2012-09-11T07:05:26.393 に答える
0

ネストされたクエリを使用できます。プル元のテーブルの名前が「#MYTABLE」で、上記の例で返された 2 つの列がある場合は、次を使用します。

SELECT #MYTABLE.Device, #MYTABLE.Service, NUMBEROFINSTANCES FROM #MYTABLE
    LEFT JOIN
        (SELECT SERVICE, COUNT(DEVICE) AS NUMBEROFINSTANCES 
        FROM #MYTABLE
        GROUP BY SERVICE) AS ABB1 ON ABB1.SERVICE = #MYTABLE.SERVICE
于 2012-09-07T16:21:24.507 に答える