0

DBにはClassificationとCompany_Classificationの2つのテーブルがあります。以下の構造は単なる例であり、コードをさらに下に示します。

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

考え直してみると、階層構造になっているようです。

;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

分類テーブルにもう一度参加する必要があります。

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 に答える