我正在清理电子商务网站上的客户列表。客户列表在客户ID和客户电子邮件之间具有多对多的关系。例如,客户可以在登录或匿名时使用同一电子邮件下订单,结果将是具有相同电子邮件但不同客户ID的两个客户记录。同样,客户可以在登录时使用两个不同的电子邮件创建订单,这将导致具有相同ID但不同电子邮件的客户记录。鉴于此,我想根据电子邮件或客户编号创建具有真正唯一ID的客户列表。此外,在某些情况下,电子邮件是空白的,因此客户记录都有空白的电子邮件,但不同的ID需要被视为两个不同的客户。SQL Server:根据两列生成唯一的客户密钥
所以给出这样的事情:
CUST_ID CUST_EMAIL
------------------------
123 [email protected]
123 [email protected]
124 [email protected]
125 [email protected]
126
127
128 [email protected]
128 [email protected]
129 [email protected]
我会想产生这样一个关键:
CUST_ID CUST_EMAIL NEW_CUST_KEY
------------------------------------
123 [email protected] 1
123 [email protected] 1
124 [email protected] 2
125 [email protected] 2
126 3
127 4
128 [email protected] 5
128 [email protected] 5
129 [email protected] 5
这是一次性转换还是可以在不改变现有数据的情况下重现的?我假定基于第一句话进行转换,那么为什么不在'WHILE'循环中做到这一点。然后,您可以与之前的记录进行比较,看看是否需要新ID。 – Steve
我将需要每天运行此操作以合并新的客户记录,但只要记录分组正确,为给定客户生成的密钥是否每天都会发生变化并不重要。我很可能每天都会截断并重新加载目标表,所以任何可用作一次转换的东西都应该没问题。 – EvanMPW
就WHILE循环而言,我不认为只和前一个记录进行比较是可行的。如果您查看上述示例中的最后一条记录,如果您之前将其与记录进行比较,则看起来它需要一个新的密钥(不同的电子邮件和ID)。但是,它确实与前两行共享一封电子邮件,这意味着所有三个应该被分组为具有相同新密钥的单个客户。 – EvanMPW