我有以下类型的表:
BranchName DistCountofCust
========== ======
Branch1 2
Branch2 1
Branch3 0
Branch4 1
我想要实现的是计算不同的CustID并按分支对它们进行分组,而不重复任何CustID。
基本上我试图做到这一点:
SELECT X.BranchName, COUNT(DISTINCT X.CustID) as DistCountofCust
FROM
(SELECT T.BranchName, T.CustID
FROM MyTable T) as X
GROUP BY X.BranchName
我试过这段代码:
Promise hell
它没有给出正确的结果(没有正确计算每个分支的CustID数量,因为CustID对某些分支重叠)。是否有可能消除不同的CustID并按给定的分支对它们进行分组? (在最终结果中,我只需要为分支机构列出唯一的客户。)
答案 0 :(得分:0)
您可以使用NOT EXISTS
。我假设分支机构根据其名称具有一定的优先权。
SELECT T1.BranchName, COUNT(DISTINCT X.CustID) as DistCountofCust
FROM MyTable T1
LEFT JOIN (
SELECT BranchName, CustID
FROM MyTable T1
WHERE NOT EXISTS (
SELECT 1
FROM MyTable T2
WHERE T1.BranchName > T2.BranchName and
T1.CustID = T2.CustID
)
) as X ON T1.BranchName = X.BranchName and T1.CustID = X.CustID
GROUP BY T1.BranchName
答案 1 :(得分:0)
一个答案给你。正如我在评论中所说的那样,理想情况下,您希望为分支设置一个单独的表,否则,在过滤结果时,您不能执行0 9的计数,这将不返回任何行,并被省略)。这就是为什么第二个CTE可以获得DISTINCT
的{{1}}值。
BranchName