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
Если вам нужны все три столбца и вы используете 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
Еще одна более простая версия, если вы используете 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