2011-07-06 14 views
0

私は2つがマスターテーブルで、もう1つはマップです3つのテーブルがあります。それらは以下の通りです。SQLテーブルからのカウントを取得

  1. tbl_Category有する列ID(PK)および名前

    /*

    ID  NAME 
    1 Agriculture & Furtilizers 
    2 Apparel & Garments 
    3 Arts & Crafts 
    4 Automobiles 
    

    */

  2. tbl_SubCategory

    /* 
    Id  SubCategoryName      CategoryId (FK, PK of above) 
    2 Badges, Emblems, Ribbons & Allied   2 
    3 Barcodes, Stickers & Labels     2 
    4 Child Care & Nursery Products    2 
    9 Fabrics & Textiles      2 
    
    
    
    */ 
    

3番目の表はtbl_Company_Category_Mapです。ここでは、すべてのカテゴリとその会社のサブカテゴリを保持しています。以下はそのスキーマとデータです。上記

/* 

CompanyCategoryId SubCategoryId CategoryId CompanyId 
10     36    11   1 
11     38    11   1 
12     40    11   1 


*/ 

、最初の列tbl_Company_Category_MapのPK、第2列はtbl_SubCategoryのPKであり、3つ目はtbl_CategoryのPKであり、最後のものは、会社のIDです。 今、私が望むのは、カテゴリの各サブカテゴリに表示されているディスプレイの合計企業を表示することです。このようなもの。

Subcategory Name          Total COmpanies 
Apparel, Clothing & Garments        1153 
Badges, Emblems, Ribbons & Allied Products    4100 
Barcodes, Stickers & Labels        998 
Child Care & Nursery Products       2605 
Cotton Bags, Canvas Bags, Jute Bags & Other Fabric Bags 2147 

私は、クエリを使用しています:

BEGIN 


SELECT  tbl_SubCategory.Name AS SubCategoryName, tbl_Category.Name AS CategoryName, TotalCompanies=(Select COUNT(*) From tbl_Company_Category_Map WHERE CategoryId = @Id) 
FROM   tbl_Category INNER JOIN 
         tbl_Company_Category_Map ON tbl_Category.Id = tbl_Company_Category_Map.CategoryId INNER JOIN 
         tbl_SubCategory ON tbl_Company_Category_Map.SubCategoryId = tbl_SubCategory.Id 
WHERE  (tbl_Company_Category_Map.CategoryId = @Id) 
Group By tbl_SubCategory.Name , tbl_Company_Category_Map.CategoryId, tbl_Category.Name 
ORDER BY tbl_Company_Category_Map.CategoryId 

END 

私の問題は、私は、各行に同じ企業の総数を取得していますということです。私を助けてください。

答えて

1

これを試してみてください:

1

これを変更してみてください:あなたはすでに、右フィールド(私がいると思う何か)によってグループ分けされている

TotalCompanies=COUNT(*)

...これに...

TotalCompanies=(Select COUNT(*) From tbl_Company_Category_Map WHERE CategoryId = @Id)

、およびWHERE句でCategoryIDフィルタが適用されます。

select sc.Name, count(*) as company_count 
from tbl_Category c 
join tbl_SubCategory sc on c.ID = sc.CategoryID 
join tbl_Company_Category_Map map on sc.ID = map.SubCategoryID 
where c.ID = @ID 
group by sc.Name 
1

は、私はかなりのビットが...この打撃を与えることを過剰に複雑なあなたを考える

BEGIN 


SELECT  tbl_SubCategory.Name AS SubCategoryName, COUNT(*) AS TotalCompanies 
FROM  tbl_Category INNER JOIN 
         tbl_Company_Category_Map ON tbl_Category.Id = tbl_Company_Category_Map.CategoryId INNER JOIN 
         tbl_SubCategory ON tbl_Company_Category_Map.SubCategoryId = tbl_SubCategory.Id 
WHERE  (tbl_Company_Category_Map.CategoryId = @Id) 
Group By tbl_SubCategory.Name 
ORDER BY tbl_SubCategory.Name 

END 
関連する問題