我有一个返回以下数据集的查询:
Device | Service ---------------- PC1 | Service1 PC1 | Service2 PC1 | Service3 PC1 | Service4 PC1 | Service5 PC1 | Service6 PC1 | Service7 PC2 | Service1 PC2 | Service2
我的报告中有一个表,它按设备分组并显示服务。但我还希望有一个饼图,显示五种最常见的服务。
我可以使用第二个数据集和存储过程相当容易地做到这一点,但我想知道是否会有一种方法来使用相同的数据集(数据已经被查询并返回,所以在我看来它会比对服务器运行单独的程序更好的性能。)
有关这是否可行的任何想法?或者我应该使用第二个查询/存储过程?
答案 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(*)OVER
和DENSE_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