Sql server 从同一列中选择空值,然后选择最大值

Sql server 从同一列中选择空值,然后选择最大值,sql-server,null,max,Sql Server,Null,Max,需要能够首先提取列中“oItemLong”为空/空白的所有行。然后,仅使用不同的工单编号提取“oItemLong”列的最大值。我们的系统使用相同的工单编号,但如果发放信用,则使用相同的工单编号,但会发放一个更高的值“oItemLong”编号,这就是我希望与所有带有空白“oItemLong”编号的行一起使用的 这应该是理想的结果 谢谢,这是你想要的吗 OEITEMLONG Workorder Amount Date 10400 1200 1/1/2017

需要能够首先提取列中“oItemLong”为空/空白的所有行。然后,仅使用不同的工单编号提取“oItemLong”列的最大值。我们的系统使用相同的工单编号,但如果发放信用,则使用相同的工单编号,但会发放一个更高的值“oItemLong”编号,这就是我希望与所有带有空白“oItemLong”编号的行一起使用的

这应该是理想的结果

谢谢,这是你想要的吗

OEITEMLONG Workorder Amount Date
           10400     1200   1/1/2017
           10400     1200   2/1/2017
100000     77777     500    1/2/2017
818181     51515     9500   1/3/2017
对于您的数据,应返回:

select t.*
from vWOSEGHEADSmryALL t
where OEITEMLONG is null
union all
select t.*
from vWOSEGHEADSmryALL t
where OEITEMLONG is not null and
      OEITEMLONG = (select max(t2.OEITEMLONG)
                    from vWOSEGHEADSmryALL t2
                    where t2.Workorder = t.Workorder
                   );

编辑您的问题,以及所需的结果。并用您正在使用的数据库标记您的问题。感谢您的快速回复。我的表是vWOHEADSmryALL.oItemLong和vWOHEADSmryALL.workorder等。您能否详细说明一下如何将其转换为Select和WHERE子句中的t1和t2语句?我在这部分后面还有两个左外联接,我也在使用。
t
指的是您正在使用的一个表。您的问题表明只有一个表。因此t2是一个别名,我将在子查询中创建它,然后在where语句中引用它?@JBrewer
t2
将对子查询中的表的引用与外部查询的引用区分开来。我没有足够的智慧去理解最后一个“from”语句中的部分,其中初始表(t)紧跟在(t2)表之后。如果我的初始表(t)名为vWOSEGHEADSmryALL,而我的(t2)表名为Gordon,那么该如何构造?谢谢你的耐心!
select t.*
from vWOSEGHEADSmryALL t
where OEITEMLONG is null
union all
select t.*
from vWOSEGHEADSmryALL t
where OEITEMLONG is not null and
      OEITEMLONG = (select max(t2.OEITEMLONG)
                    from vWOSEGHEADSmryALL t2
                    where t2.Workorder = t.Workorder
                   );
OEITEMLONG Workorder Amount Date
           10400     1200   1/1/2017
           10400     1200   2/1/2017
100000     77777     500    1/2/2017
818181     51515     9500   1/3/2017