我有两张桌子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逻辑?
答案 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