更新并加入SQL Server中的计算新列

时间:2015-02-05 20:25:16

标签: sql sql-server

我有两张桌子1)发送和2)测试菜单。

在Sendouts中,我有一个与每条记录相关联的“订单代码”列,其中一些也存在于名为“CCD#”的列下的“测试菜单”中。这基本上是我们执行的订单代码列表(在测试菜单中)。

我想创建一个查询,对于Sendouts中的每个记录都会检查测试菜单中是否存在订单代码,如果确实存在,则将一个Y放在Sendouts上的新列中,如果它不是N.

任何帮助都将不胜感激。

编辑:

我已经切换到使用SQL Server(来自Access),因为编码更容易......我有以下代码,除了一个问题它起作用:

UPDATE a
SET ExistsInTestMenu = CASE WHEN (a.CCD# = b.OrderCode) THEN 'Y' ELSE 'N' END
FROM sendoutled a
JOIN TestMenu b ON a.CCD# = b.OrderCode

在我的表中,我正在尝试更新,它只是用Y或N更新每个订单代码的第一条记录(有时......),其余的保持为空,所以在这段代码中有一些东西它没有t继续通过所有实例......

编辑2: 哦,我现在得到它,当答案是N时,它停在它找到的那个订单代码的第一个记录,当答案是Y时,它将循环遍历所有带有该订单代码的记录,所以它必须是CASE WHEN ... END逻辑?

3 个答案:

答案 0 :(得分:0)

当他们拥有相同的订购代码时,您应该使用outer join将TestMenu加入Sendouts。这样,你会得到Sendouts中每一行的一行,以及其他信息或null,取决于TestMenu中是否有相应的记录。

然后,您可以将其放在更新查询中,您可以将额外列更新为[IIF][2](TestMenu.ID IS NULL, 'N', 'Y'),其中ID表示TestMenu中填充在其每一行中的任何列。

如果你想要更详细的代码帮助,我建议你尝试一下,看看你得到了多远,然后带着一个带有示例代码的新问题回到这里以获得帮助,如果你不能得到它工作。

答案 1 :(得分:0)

我认为您正在寻找简单的加入。此代码应该有效(未经测试):

select s.*,
       case when t.ID is null then 'N' else 'Y' end IsCodeExists        
from Sendouts s
left join TestMenu t on s.OrderCode = t.OrderCode

答案 2 :(得分:0)

您可能需要稍微更改Access的语法,但是在MS Sql Server中如何执行此操作:

您需要在SendOuts表中添加一个额外的列。我把它命名为ExistsinTestMenu'这里。

UPDATE a
SET ExistsInTestMenu = CASE WHEN (a.Ordercodes = b.Ordercodes) THEN 'Y' ELSE 'N' END
FROM SendOuts a
JOIN TestMenu b ON a.ID = b.ID