首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改SQL server的现有语句

修改SQL server的现有语句
EN

Stack Overflow用户
提问于 2017-08-02 07:27:48
回答 1查看 48关注 0票数 1

我在同一台服务器上有两个数据库。我们将调用第一个数据库ActiDB,第二个数据库将调用DomiDB。在DomiDB上有一个名为DomiActV7的表,我们将处理这个表。在DomiActV7中有一个名为Domain的列和另一个称为NumOfClicks的空列。

现在让我们看看另一个名为ActiDB的数据库。有两张桌子对我们来说很重要。第一个表称为ActV7,第二个表称为SeV7

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

解释上层文本“每个域合并在一起”:ActV7中有一个电子邮件列表,DomiActV7中有一个域列表。域列表应该检查ActV7电子邮件并找到匹配的域(例如: test@testdomain.com是我们的电子邮件,testdomain.com是我们的域。查询在该电子邮件中找到了具有相同域的电子邮件,现在将使用行ID将我们连接到同一数据库中的另一个表,名为SeV7)我们可以从该行获得的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

示例表:来自DomiActV7的DomiDB

代码语言:javascript
复制
+-----------------+-----------------+
|      Domain     |    NumOfClicks  |
+-----------------+-----------------+
|thisisadomain.net|                 |
+-----------------+-----------------+
| moreexamples.com|                 |
+-----------------+-----------------+
           ...............

ActV7来自ActiDB

代码语言:javascript
复制
+--------------------+-----------------+
|        Email       |  SeV7OID (key)  |
+--------------------+-----------------+
|example@examail.com |        1        |
+--------------------+-----------------+
|a@moreexamples.com  |        3        |
+--------------------+-----------------+
            .............

SeV7来自ActiDB

代码语言:javascript
复制
+--------------------+-----------------+
|    SeV7OID (key)   |    NumOfClicks  |
+--------------------+-----------------+
|          3         |       41        |
+--------------------+-----------------+
|          4         |       22        |
+--------------------+-----------------+
|          1         |      65535      |
+--------------------+-----------------+
          ..................
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-02 09:06:29

这会产生预期的结果吗?

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45454200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档