根据列值从连接语句中提取一列值

时间:2016-03-29 19:54:54

标签: sql sql-server

这是我当前的查询

SELECT O.SubStatus,
OM.ORDERID AS ReorderID, 
FROM [dbo].[Orders] O (NOLOCK)
LEFT JOIN OShipped OM (NOLOCK) ON O.OrderID = OM.POrderID

我想根据OM.PorderID或ROrderID的值填充ReOrderID。如果OM.POrderID具有值,则将其填充为ReOrderID,如果ROrderID具有值[来自不同的表],则填充该值。表MOrder和RPOrder中的这两列是互斥的。

2 个答案:

答案 0 :(得分:0)

我不确定列的位置,但这应该有效:

UPDATE OShipped      SET
    ReOrderID= coalesce(OM.POrderID,ROrderID ,0)
FROM
OShipped OM 
INNER JOIN
 [dbo].[Orders] O 
ON
 O.OrderID = OM.POrderID

答案 1 :(得分:0)

主要是COALESCE功能。在这个示例中,我假装您提到的“其他表”名为OTHERTABLE,并且它已连接到名为SomeKey的列上的主要订单表。

我也在解释你的问题意味着(通过“填充”)你希望你所谈论的价值反映在SELECT语句的输出中,而不是你想修改实际桌子就位。 (如果你想要后者,那么Benjamin Moskovits的回答会更有帮助。)

SELECT
 O.SubStatus,
 COALESCE(OM.ORDERID,OTHERTABLE.ROrderID) AS ReorderID, 
FROM [dbo].[Orders] O (NOLOCK)
LEFT JOIN OShipped OM (NOLOCK)
 ON O.OrderID = OM.POrderID
LEFT JOIN OTHERTABLE (NOLOCK)
 ON O.OrderID = OTHERTABLE.SomeKey