修改SQL Server

时间:2017-08-02 07:27:49

标签: sql-server database email

我在同一台服务器上有2个数据库。我们将调用我们的第一个数据库ActiDB,第二个数据库将是DomiDBDomiDB上有一个名为DomiActV7的表格,我们将在其中进行处理。在DomiActV7中,有一列名为Domain,另一列为空,名为NumOfClicks

现在让我们看一下名为ActiDB的其他数据库。那里有2张桌子对我们很重要。第一个表称为ActV7,第二个表称为SeV7

我需要做的是是获取表NumOfClicks数据库 SeV7)中的ActiDB另一个数据库(DomiDB)为每个域组合在一起,并存储在名为NumOfClicks的空列中。

解释上部文字" 为每个域组合在一起":ActV7中有一个电子邮件列表,其中有一个DomiActV7中的域名列表。域名列表应该检查ActV7个电子邮件并找到匹配的域名(例如:test@testdomain.com是我们的电子邮件,testdomain.com是我们的域名。查询在该电子邮件中找到了具有相同域名的电子邮件,现在将使用该域名将我们连接到名为SeV7的同一数据库中的另一个表的行ID。我们可以从具有加工域的电子邮件的行获取的ID称为SeV7OID。使用此ID,我们可以进入另一个表SeV7,我们可以找到NumOfClicks

既然我们找到了通往NumOfClicks的路,我们需要以某种方式将它们合并在一起,因为在之前的表中会有更多具有相同域的电子邮件,这意味着它将为我们提供更多ID,从而导致更多NumOfClicks ..我需要将合并后的点击次数输回到第一个表DomiActV7,还有一个特定的数字65535应该被视为数字1.这已经在现有的查询中实现。

应该更新所做的查询以查找ActV7 Email然后获取SeV7OID ID并使用该ID找到NumOfclicks并将其输入到其他数据库中。我希望我没有太复杂的事情,但我试图尽可能地解释这种情况。此处还有一个带有相似问题的旧帖子的链接:Link to the post

每个列数据类型为varchar(50),仅SeV7OID,其他ID为INT。

  

此查询有什么问题,它确实导致SeV7中的电子邮件搜索错误,因为丢失的电子邮件多于此处   写在那个表中,这就是我们必须从ActV7检查的原因   它存储了所有电子邮件。

     

需要修改的现有查询:

     

UPDATE DomiDB..DomiActV7 SET NumOfClicks = a.NumOfClicks FROM DomiDB..DomiActV7 d JOIN (SELECT Domain, SUM(CASE WHEN e.NumOfClicks = 65535 THEN 1 ELSE e.NumOfClicks END) AS NumOfClicks FROM DomiDB..DomiActV7 d JOIN ActIDB..nact.SeV7 e ON '@'+d.Domain = right(e.Email,len(d.domain)+1)) a ON a.Domain=d.domain

示例表:来自DomiDB的 DomiActV7

+-----------------+-----------------+
|      Domain     |    NumOfClicks  |
+-----------------+-----------------+
|thisisadomain.net|                 |
+-----------------+-----------------+
| moreexamples.com|                 |
+-----------------+-----------------+
           ...............

来自ActiDB的ActV7

+--------------------+-----------------+
|        Email       |  SeV7OID (key)  |
+--------------------+-----------------+
|example@examail.com |        1        |
+--------------------+-----------------+
|a@moreexamples.com  |        3        |
+--------------------+-----------------+
            .............

来自ActiDB的SeV7

+--------------------+-----------------+
|    SeV7OID (key)   |    NumOfClicks  |
+--------------------+-----------------+
|          3         |       41        |
+--------------------+-----------------+
|          4         |       22        |
+--------------------+-----------------+
|          1         |      65535      |
+--------------------+-----------------+
          ..................

1 个答案:

答案 0 :(得分:1)

这会产生预期的结果吗?

UPDATE d SET d.NumOfClicks = a.NumOfClicks  
FROM DomiDB..DomiActV7 d JOIN
( SELECT d.domain, 
    SUM(CASE 
      WHEN e.NumOfClicks = 65535 THEN 1 
     ELSE e.NumOfClicks END) AS NumOfClicks  
FROM
    DomiDB..DomiActV7 d1  
    JOIN ActIDB..Actv7 aa ON '@'+d1.domain = right(aa.Email,len(d1.domain)+1) 
    JOIN ActIDB..SeV7 e ON e.SeV7OID = aa.SeV7OID
     group by d1.domain 
)   a ON a.domain=d.domain