我之前已经提到了相同的数据和表格,但这次要求略有不同。所以请不要投票给它关闭或者投票。 我有4个表,如图3中的表所示,另一个是tbl_Company:
现在在map表中,其余三个表的主键。同样在表子类别中,我们有各种类别的子项,标有类别ID 2,但如果您在地图中看到我们只有4项类别2,并且有两个独特的公司7和8。
所以我想要的是在选择一个类别时显示,其所有子类别将与公司数量一起列出。就像在地图表中一样,cat id 2有4行并且有12个子猫(实际上在表中它是44)。所以我的输出将有所有44 subcat与显示4子猫有公司和休息0.像这样的东西
SubCategoryName TotalCompanies
--------------- --------------
Badges, Emblems 0
Fashion scarves 1
… …
等等。
我使用了这个查询
SELECT tbl_SubCategory.Name AS SubCategoryName, TotalCompanies = (Select COUNT(CompanyId) From tbl_Company_Category_Map WHERE CategoryId=2 )
FROM tbl_Category RIGHT JOIN
tbl_SubCategory ON tbl_Category.Id = tbl_SubCategory.CategoryId
LEFT JOIN
tbl_Company_Category_Map ON tbl_SubCategory.Id = tbl_Company_Category_Map.SUbCategoryId
WHERE (tbl_Category.Id = 2)
Group By tbl_SubCategory.Name
ORDER BY tbl_SubCategory.Name
但它返回了我所有44个子类别的4家公司,因为我的实际产量应该只有4行应该有公司并且休息0
答案 0 :(得分:1)
您是否尝试过使用相关查询?相关查询是在主查询中使用子查询外部的列的值的子查询。它看起来像这样:
SELECT
tbl_SubCategory.Name AS SubCategoryName,
TotalCompanies = (
Select
COUNT(CompanyId)
From
tbl_Company_Category_Map
WHERE
CategoryId = tbl_Category.Id) -- Here, it will count using the current cat_id
FROM
tbl_Category
RIGHT JOIN tbl_SubCategory
ON tbl_Category.Id = tbl_SubCategory.CategoryId
LEFT JOIN tbl_Company_Category_Map
ON tbl_SubCategory.Id = tbl_Company_Category_Map.SUbCategoryId
WHERE
(tbl_Category.Id = 2)
Group By
tbl_SubCategory.Name
ORDER BY
tbl_SubCategory.Name
答案 1 :(得分:1)
您正在寻找一个有汇总的小组:
SELECT tbl_SubCategory.Name, tbl_Company_Category_Map.Company_ID,count(tbl_Category.Id)
FROM tbl_Category
RIGHT JOIN tbl_SubCategory ON tbl_Category.Id = tbl_SubCategory.CategoryId
LEFT JOIN tbl_Company_Category_Map ON tbl_SubCategory.Id = tbl_Company_Category_Map.SUbCategoryId
WHERE (tbl_Category.Id = 2)
Group By Rollup(tbl_SubCategory.Name,tbl_Company_Category_Map.Company_ID)
ORDER BY tbl_SubCategory.Name
关于结果集的更多信息,只有子猫的计数对于公司ID将为空。
答案 2 :(得分:1)
此特定查询似乎不需要tbl_Category
表:
SELECT
SubCategoryName = tbl_SubCategory.Name,
TotalCompanies = COUNT(DISTINCT ccm.CompanyId)
FROM tbl_SubCategory sc
LEFT JOIN tbl_Company_Category_Map ccm ON sc.Id = ccm.SubCategoryId
WHERE sc.CategoryId = 2