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
排序。
我很难达到标题中提到的和下面描述的预期结果,不幸的是我在 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
排序。