我的数据库中有2个表作为Classification和Company_Classification。下面的结构只是一个例子,我在下面进一步给出了我的代码。
Classification
ClassId
ClassName
Parent_Id
Company_Classification
LinkId
CompanyId
ClassId
我需要计算属于父母分类的公司数量,并按父母分类对其进行分组。因此,属于每个儿童分类的公司将按其父母分类计算。
SELECT
TOP (100) PERCENT dbo.CLASSIFICATION.class_name,
COUNT(dbo.COMPANY_CLASSIFICATION.Company_ID) AS Count
FROM
dbo.CLASSIFICATION
INNER JOIN dbo.COMPANY_CLASSIFICATION
ON dbo.CLASSIFICATION.class_id = dbo.COMPANY_CLASSIFICATION.Class_ID
WHERE (dbo.CLASSIFICATION.parent_id = 0)
GROUP BY dbo.CLASSIFICATION.class_name
ORDER BY dbo.CLASSIFICATION.class_name
我不确定我是否正确地表达了我的问题。那么,基本上我怎样才能查询查询以获得按父分类(包括子记录)分组的公司记录?
谢谢,
答案 0 :(得分:1)
第二个想法,看起来你可能有层次结构。
;WITH ClassificationHierarchy AS
(
SELECT ClassId
,ClassName
,RootParent = ClassId
FROM Classification
WHERE Parent_Id = 0
UNION ALL
SELECT CS.ClassId
,CS.ClassName
,RootParent
FROM ClassificationHierarchy CH
JOIN Classification CS ON CH.ClassId = CS.Parent_Id
)
SELECT RootParent, COUNT(*)
FROM ClassificationHierarchy CH
JOIN Company_Classification CC ON CC.ClassId = CH.ClassId
GROUP BY RootParent
答案 1 :(得分:1)
您需要第二次加入分类表:
select cparent.class_name, count(*)
from Company_Classification cc join
Classification c
on cc.Classid = C.ClassId join
Classification cparent
on c.parent_id = cparent.classid
group by cparent.class_name
答案 2 :(得分:0)
因为你在那里使用TOP条款?如果你想计算每个分类的数量必须删除顶部。
如果您想要的是前100家公司可能有意义,那么您必须创建一个具有顶部的子查询,并将这些子查询与主查询一起创建。