Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于列值从join语句中提取一个列值_Sql_Sql Server - Fatal编程技术网

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