Select Count(*) From ( Select i.name, Count(i.name) From item As I Join item_category As ic On ic.ic_id = i.category_id Join idetail as ID On ID.id_category_id = ic.ic_id Where ic.ic_id = 1002 Group By i.name ) As Z
If you need all three columns and you are using SQL Server 2005 +
With Items As ( Select I.name, Count(i.name) As ItemCount From item As I Join item_category As ic On ic.ic_id = i.category_id Join idetail as ID On ID.id_category_id = ic.ic_id Where ic.ic_id = 1002 Group By i.name ) Select Name, ItemCount , ( Select Count(*) From Items ) As OverallCount From Items
Another simpler version if you are using SQL Server 2005+.
Select i.name , Count(i.name) As CountByName , Count(*) Over() As TotalCount From item As I Join item_category As ic On ic.ic_id = i.category_id Join idetail as ID On ID.id_category_id = ic.ic_id Where ic.ic_id = 1002 Group By i.name
source share