Tsql T-SQL条件顺序由A,B决定,如果A不为NULL,则为B

Tsql T-SQL条件顺序由A,B决定,如果A不为NULL,则为B,tsql,sql-order-by,Tsql,Sql Order By,我很难达到标题中提到的和下面描述的预期结果,不幸的是,我无法在谷歌上找到解决这个问题的方法 问题如下: 我在varchar类型中有两列A和B,A列可以有空值。 如果A不为空,我想打印按A排序的行,然后打印按B排序的行,否则只打印按B排序的行 下图显示了我在这3次尝试中得到的结果: 尝试1:由A、B订购 尝试2:当A为空时,按大小写排序,否则B结束 尝试3:按聚结、B、B排序 它们首先显示空值的所有行,然后显示非空值的行 下图显示了我想要的订单: 我们非常感谢您的帮助 致以最诚挚的问候。根据您提供

我很难达到标题中提到的和下面描述的预期结果,不幸的是,我无法在谷歌上找到解决这个问题的方法

问题如下: 我在varchar类型中有两列A和B,A列可以有空值。 如果A不为空,我想打印按A排序的行,然后打印按B排序的行,否则只打印按B排序的行

下图显示了我在这3次尝试中得到的结果:

尝试1:由A、B订购

尝试2:当A为空时,按大小写排序,否则B结束

尝试3:按聚结、B、B排序

它们首先显示空值的所有行,然后显示非空值的行

下图显示了我想要的订单:

我们非常感谢您的帮助


致以最诚挚的问候。

根据您提供的数据,尝试以下方法:

create table #asd
(
    ID int,
    A varchar(10),
    B varchar(10)
)

insert into #asd
values
(1,'AB','BD'),
(2,'AA','BC'),
(3,null,'AA'),
(4,null,'BA'),
(5,'BA','BE')


select *
from #asd temp
order by
    case 
        when temp.A is not null 
            then temp.A
        else temp.B 
        end,
    temp.B
关于

请尝试:

ORDER BY COALESCE(A,'')+COALESCE(B,'') 
那么:

order by Coalesce( A, B ),
  case when A is NULL then NULL else B end

这将按A排序,或者,如果A为空,则按B排序,如果A为非空,则按B排序。

我的尝试:1:按A、B排序,将显示所有带有空值的行,然后显示带有非空值的行;2:按情况排序,如果A为空,则B否则A结束都失败,我仍在网上搜索解决方案,感谢您的评论。我建议您参观一下网站,学习如何提出一个好问题。我暂时退出。感谢您的支持,这是我在这个网站上的第一个问题。如果您向我们展示您所需要的确切输出/逻辑,我愿意再次尝试您的问题。您的问题仍然显示原始顺序,我现在删除的答案提供了原始顺序。我刚刚编辑了我的问题,很抱歉,我不知道如何将图像直接放到帖子中。谢谢你的耐心。谢谢你的回答,我一回到工作岗位就会尝试。谢谢你的回答,我一回到工作岗位就会尝试。我已经从工作中重新创建了数据,这完美地完成了工作!非常感谢您的帮助:我本打算不再尝试使用ORDER BY,而只是创建一个临时列,连接a和B值,并添加空格来填充a值,以调整a列大小,然后按该列排序,但这使它变得更容易,再次感谢。这将如何正确地排序“否”、“T”和“N”、“OT”?鉴于小样本数据集,尚不清楚这是否会成为一个问题。HABO的观点很好,我正在研究的公司注册名称和商品名称的数据不太可能发生这种情况,在某些情况下可能没有商品名称,如果发生这种情况,对报告的影响将是微不足道的。然而,我一直认为ORDERBY在末尾添加了一个按主键的显式排序,因为它总是唯一的,我错了吗?@ZineddineB。没有明确的命令,就没有命令。匹配值之间的顺序未定义,可能会不时更改,例如,对数据库引擎的更新可能会导致查询优化器执行稍有不同的操作。指数统计数据的变化也是如此。主键。如果有,则不会隐式包含在排序中。当一个查询连接多个表时,可能会有很多主键。谢谢你的回答,我一回去工作就会尝试。