我很难实现标题中提到的和下面描述的预期结果,很遗憾,我无法在Google上找到解决此问题的解决方案。
问题如下: 我在varchar类型中有两列A和B,A列可以有空值。 如果A不为空,我想打印A和B排序的行,否则,只按B排序。
下图说明了我在这3次尝试中获得的结果:
尝试1:按A,B排序
尝试2:当一个是空的时候按顺序排序然后结束
尝试3:按照COALESCE(A,B),B
命令它们首先显示A为null的行,然后显示A不为空的行
下一张图片显示了我想要的订单:
我们非常感谢您的帮助。
最好的问候。
答案 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
排序。