SSRS从数据集中获取最常见的条目

时间:2012-09-07 13:49:34

标签: c# sql-server reporting-services reportviewer

我有一个返回以下数据集的查询:

Device | Service
----------------
PC1    | Service1
PC1    | Service2
PC1    | Service3
PC1    | Service4
PC1    | Service5
PC1    | Service6
PC1    | Service7
PC2    | Service1
PC2    | Service2

我的报告中有一个表,它按设备分组并显示服务。但我还希望有一个饼图,显示五种最常见的服务。

我可以使用第二个数据集和存储过程相当容易地做到这一点,但我想知道是否会有一种方法来使用相同的数据集(数据已经被查询并返回,所以在我看来它会比对服务器运行单独的程序更好的性能。)

有关这是否可行的任何想法?或者我应该使用第二个查询/存储过程?

2 个答案:

答案 0 :(得分:0)

您可以使用嵌套查询。如果您从中提取的表的名称称为“#MYTABLE”并且它在上面的示例中返回了两列,那么您将使用

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

答案 1 :(得分:0)

我假设你想要每组计数,只显示TOP 5.你可以使用COUNT(*)OVERDENSE_RANK()OVER的CTE:

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/