sql-server - 修改 SQL Server 的现有语句

标签 sql-server database email

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

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

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

解释上面的文字Combined together for each domain”:ActV7 中有一个电子邮件列表,还有一个域列表在 DomiActV7 中。域列表应检查 ActV7 电子邮件并找到匹配的域(例如:test@testdomain.com 是我们的电子邮件,testdomain.com 是我们的域。查询在该电子邮件中找到具有相同域的电子邮件,并将现在使用该行 ID 将我们连接到同一数据库中名为 SeV7 的另一个表)我们可以从具有 maching 域的电子邮件所在的行中获得的 ID 称为 SeV7OID。使用此 ID,我们可以进入另一个表 SeV7,我们可以在其中找到 NumOfClicks

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

进行的查询应更新为在 ActV7 中查找 Email 然后获取 SeV7OID ID 并使用该 ID 它应该找到NumOfclicks 并将它们输入到另一个数据库中。我希望我没有把事情搞得太复杂,但我正在尽我所能解释情况。这里还有一个指向具有类似问题的旧帖子的链接:Link to the post

每个Columns数据类型都是varchar(50),只有SeV7OID,其他ID是INT。

What is wrong with this query that it does direct Email search in SeV7 which is wrong because there is more missing emails than there is written in that table that is why we have to check from ActV7 which has all the emails stored.

Existing query that needs to be modified:

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      |
+--------------------+-----------------+
          ..................

最佳答案

这会产生预期的结果吗?

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

关于sql-server - 修改 SQL Server 的现有语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45454200/

相关文章:

mysql - 更新mysql中的查询与mssql中的结果不一样

sql - 根据 ID 列将行转置为列

database - 什么是 couchdb,我应该使用它做什么以及如何使用它?

ios - 如何在 iOS 上将 "extension"添加到 native 邮件客户端?

php邮件函数: legitimate mails marked as spam by gmail and hotmail

sql - "Adding"GROUP BY 's and ORDER BY' 在一个查询中而不是单独的

java - 添加当前日期时间逻辑后,无法在java数据库中插入数据

SQL:处理 NULL 值(联合)

php - 在 mysql 中存储搜索查询

python - 如何在 Django 中创建 'notify me of followup comments via e-mail' 按钮?