Получение подсчета из таблиц sql - PullRequest
0 голосов
/ 06 июля 2011

У меня есть три таблицы, в которых две являются мастер-таблицами, а другая - картой. Они приведены ниже.

  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
    
    
    
    */
    

Теперь третья таблица - tbl_Company_Category_Map, где я храню все категории и подкатегории компании. ниже его схема и данные.

/*

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


*/

Выше, первый столбец - это PK tbl_Company_Category_Map, второй столбец - это PK tbl_SubCategory, а третий - PK для tbl_Category, а последний - идентификатор компании. Теперь я хочу отобразить общее количество компаний, перечисленных в каждой подкатегории категории. Примерно так.

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

Моя проблема в том, что я получаю одинаковое количество компаний для каждой строки. Пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 06 июля 2011

Я думаю, вы слишком усложнили это, немного ... попробуйте:

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
0 голосов
/ 06 июля 2011

Попробуйте это:

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
0 голосов
/ 06 июля 2011

Попробуйте изменить это:

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

... на это ...

TotalCompanies=COUNT(*)

Вы уже группируете по(что я думаю) правильные поля, и ваше предложение WHERE будет применять фильтр CategoryID для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...