2012-01-20 145 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

你可以尝试这样的事:

;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); 
+0

谢谢..它的工作原理。 –

0

试试这个Stamtent解决问题

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

我想你会想这样。

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 

这样就避免了通过将表连接到自身并且可以非常有效地进行子查询。