T-SQL条件ORDER BY A,B如果A不为NULL ELSE B

时间:2018-02-06 10:39:14

标签: tsql sql-order-by

我很难实现标题中提到的和下面描述的预期结果,很遗憾,我无法在Google上找到解决此问题的解决方案。

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

下图说明了我在这3次尝试中获得的结果:

尝试1:按A,B排序

尝试2:当一个是空的时候按顺序排序然后结束

尝试3:按照COALESCE(A,B),B

命令

它们首先显示A为null的行,然后显示A不为空的行

The order I'm getting

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

The order I want to have

我们非常感谢您的帮助。

最好的问候。

3 个答案:

答案 0 :(得分:0)

根据您提供的数据,尝试类似的内容:

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

此致

答案 1 :(得分:0)

尝试:

ORDER BY COALESCE(A,'')+COALESCE(B,'') 

答案 2 :(得分:0)

怎么样:

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

如果A不为NULL,则按A排序,如果B为NULL,则为B,然后按A排序。