繁体   English   中英

SQL Join自引用表

[英]SQL Join self referencing table

我的数据库中有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

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

谢谢,

第二个想法,看起来你可能有一个层次结构。

;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

您需要第二次加入分类表:

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

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

如果您想要的是前100家公司可能有意义,那么您必须创建一个具有顶部的子查询,并将这些子查询与主查询一起创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM