【发布时间】:2011-09-10 23:00:16
【问题描述】:
我将尝试描述真实情况。在我们公司,我们有一个带桌子的预订系统,我们称之为Customers,其中电子邮件和电话联系人与每个收到的订单一起保存 - 这是我无法更改的系统的一部分。我正面临如何计算 unique 客户的问题。对于唯一客户,我指的是拥有相同电子邮件或相同电话号码的一群人。
示例 1:您可以从现实生活中想象已婚的汤姆和桑德拉。订购了 4 种产品的 Tom 在我们的预订系统中填写了 3 个不同的电子邮件地址和 2 个不同的电话号码,其中一个与 Sandra(作为家庭电话)共享,因此我可以假设它们以某种方式连接。除了这个共享电话号码之外,Sandra 还填写了她的私人电话号码,对于这两个订单,她只使用了一个电子邮件地址。对我来说,这意味着将以下行中的所有行计为一个唯一客户。所以事实上这个独特的客户可能会成长为整个家庭。
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 tom@email.com +44 111 111 First row
1 tommy@email.com +44 111 111 Same phone, different e-mail
2 thomas@email.com +44 111 111 Same phone, different e-mail
3 thomas@email.com +44 222 222 Same e-mail, different phone
4 sandra@email.com +44 222 222 Same phone, different e-mail
5 sandra@email.com +44 333 333 Same e-mail, different phone
正如ypercube 所说,我可能需要一个递归来计算所有这些独特的客户。
示例 2:这是我想要做的示例。
是否可以在不使用递归的情况下获取 唯一客户数例如使用游标或其他东西还是需要递归?
ID E-mail Phone Comment
---- ------------------- -------------- ------------------------------
0 linsey@email.com +44 111 111 ─┐
1 louise@email.com +44 111 111 ├─ 1. unique customer
2 louise@email.com +44 222 222 ─┘
---- ------------------- -------------- ------------------------------
3 steven@email.com +44 333 333 ─┐
4 steven@email.com +44 444 444 ├─ 2. unique customer
5 sandra@email.com +44 444 444 ─┘
---- ------------------- -------------- ------------------------------
6 george@email.com +44 555 555 ─── 3. unique customer
---- ------------------- -------------- ------------------------------
7 xavier@email.com +44 666 666 ─┐
8 xavier@email.com +44 777 777 ├─ 4. unique customer
9 xavier@email.com +44 888 888 ─┘
---- ------------------- -------------- ------------------------------
10 robert@email.com +44 999 999 ─┐
11 miriam@email.com +44 999 999 ├─ 5. unique customer
12 sherry@email.com +44 999 999 ─┘
---- ------------------- -------------- ------------------------------
----------------------------------------------------------------------
Result ∑ = 5 unique customers
----------------------------------------------------------------------
我已尝试使用 GROUP BY 进行查询,但我不知道如何按第一列或第二列对结果进行分组。我正在寻找让我们说类似的东西
SELECT COUNT(*) FROM Customers
GROUP BY Email OR Phone
再次感谢您的任何建议
附注
在完整改写之前,我非常感谢这个问题的答案。现在这里的答案可能与更新不对应,所以如果你打算这样做,请不要在这里投反对票(当然问题除外:)。我完全重写了这篇文章。
感谢并为我的错误开始感到抱歉。
【问题讨论】:
-
尝试搜索
OVER和PARTITION BY或window functions -
为什么 George 的计数是 3,为什么他的 Id 从 5 变成 7
-
也许我的问题并不清楚,但我只寻找这种独特客户的独特数量。我会更新我的问题,非常抱歉参与者并感谢您的努力。
-
@Conrad Frix - 因为 George 和 Thomas 有相同的电话,而 Thomas 和 Thomas 有相同的名字(实际上是电子邮件)。所以这在现实生活中意味着乔治和托马斯是例如。已婚
:)并且他们有共同的电话,所以我将他们视为同名或相同电话的唯一客户。 -
@daemon_x:不要删除。您可以在问题末尾添加“更新”,标记您可能需要递归查询。
标签: sql-server sql-server-2005 tsql recursion