0

我的数据库中有 2 个表作为分类和 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

我不确定我是否正确地表达了我的问题。那么,基本上我如何调整查询以获取按父分类(包括子记录)分组的公司记录?

谢谢,

4

3 回答 3

1

On second thought, it looks like you might have a hierarchy structure.

;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
于 2013-01-07T17:07:06.533 回答
1

You need to join a second time to the classification table:

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
于 2013-01-07T17:09:09.763 回答
0

因为你在那里使用 TOP 子句?如果要计算每个分类有多少必须删除顶部。

如果您想要的是前 100 家公司可能有意义,但是您必须创建一个子查询,其中包含顶部和这些与主查询一起。

于 2013-01-07T17:10:25.157 回答