T-SQL 条件 ORDER BY A, B if A is not NULL ELSE B

T-SQL Conditional ORDER BY A, B if A is not NULL ELSE B

我很难达到标题中提到的和下面描述的预期结果,不幸的是我在 Google.

上找不到这个确切问题的解决方案

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

下图说明了我通过这 3 次尝试得到的结果:

尝试 1:由 A、B 订购

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

尝试 3:ORDER BY COALESCE(A, B), B

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

The order I'm getting

下一张图片显示了我想要的顺序:

The order I want to have

非常感谢您的帮助。

此致。

根据您提供的数据,尝试类似的操作:

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 为 NULL,则 B 然后如果 A 不为 NULL,则按 B 排序。