2012-01-20 15 views
0

は、私がどのようにこの表から、子どもたちの最も多数を持っている顧客を取得するには、次の列SQL親子関係クエリ

CustomerID, CustomerName, ParentCustomerID 

を顧客テーブルを持つのでしょうか?

答えて

1

私はそれを行う最も効率的な方法だとは思えますが、このようなことはうまくいくはずです。

また、私はこれを実行していないので、動作させるには少しマッサージが必要な場合があります。 :)

select customerId, CustomerName 
from 
    customers 
where customerId = (
    select top 1 ParentCustomerID 
    from 
     customers 
    group by ParentCustomerID 
    order by count(*) desc 
) 
0

あなたはこのような何かを試みることができる:私はあなたがこれをしたいと思う問題

SELECT TOP 1 ParentCustomerID, COUNT(customerID) 
FROM customer 
GROUP BY ParentCustomerID 
+0

ありがとうございます。 –

0

を。

select top 1 
    PARENT.CustomerID, 
    NumberOfChildren = count(CHILD.CustomerID) 
from customers PARENT 
left join customers CHILD on PARENT.CustomerID = CHILD.ParentCustomerID 
group by PARENT.CustomerID 
order by NumberOfChildren desc 

これは左自体にテーブルを結合することによって、サブクエリの必要性を回避し、非常に効率的であることができます。

1

を解決するために、このStamtentを試してみてください

;WITH CTE(ChildCount, ParentCustomerID) 
AS 
(
    SELECT 
      COUNT(customerID) ChildCount, 
      ParentCustomerID 
    FROM TABLE 
    GROUP BY ParentCustomerID 
) 
SELECT TABLE.CustomerId, TABLE.CustomerName 
FROM CTE 
INNER JOIN TABLE 
ON 
TABLE.CustomerId = CTE.ParentCustomerID 
AND 
CTE.ChildCount = (SELECT MAX(ChildCount) FROM CTE);