Sql 基于列值从join语句中提取一个列值
这是我目前的问题Sql 基于列值从join语句中提取一个列值,sql,sql-server,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的值填充重新排序。如果OM.POrderID有一个值,则将其填充为ReOrderID,如果ROrderID有值[来自不同的表],则填充该值。表MOrder和RPO
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的值填充重新排序。如果OM.POrderID有一个值,则将其填充为ReOrderID,如果ROrderID有值[来自不同的表],则填充该值。表MOrder和RPOrder中的这两列是互斥的。我不确定列在哪里,但这应该可以工作:
UPDATE OShipped SET
ReOrderID= coalesce(OM.POrderID,ROrderID ,0)
FROM
OShipped OM
INNER JOIN
[dbo].[Orders] O
ON
O.OrderID = OM.POrderID
主要是
合并
函数。在本例中,我假设您提到的“其他表”名为OTHERTABLE
,并且它连接到名为SomeKey
的列上的主订单表
我还将您的问题解释为(通过“填充”)您希望您正在谈论的值反映在SELECT
语句的输出中,而不是希望修改实际的表。(如果你想要后者,那么本杰明·莫斯科维茨的答案更有用。)
不推荐在使用查询提示时省略WITH关键字。更大的担忧是NOLOCK的自由使用。您对不准确的结果是否满意,因为有时行将返回两次,而其他时间将被跳过?这是使用NOLOCK的其他效果之一。这不仅仅是肮脏的阅读。至于你的实际问题,这是一个很好的起点。
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