在SSRS矩阵中对字母数字列进行排序

问题描述

我有一列需要按矩阵排序的列,但是我的问题是该列包含数字和字符的混合,因为它是一个范围字段,并且每个分组父级的范围都不同。 分组的示例如下

Create Table #temp
(
range Varchar(30)
)
Insert into #temp (range)
select '[0-501]' Union      
select '[13001-17001]'   Union  
select  '[17001-999999]'   Union    
select '[8501-13001]'    Union      
select '[501-8501]' 

SELECT  * 
FROM  #temp order by range

drop table #temp


[17001-999999] 
[0-501]     
[13001-17001]       
[8501-13001]        
[501-8501]   

订购后的首选结果如下

[0-501]  
[501-8501]  
[8501-13001]
[13001-17001]   
[17001-999999]

解决方法

最好设计表,使其具有某种“排序顺序”列。 但是您可以使用此:

SELECT *,TRY_CAST(SUBSTRING(range,2,CHARINDEX('-',range)-2) AS INT) as SortOrder
FROM #temp 

然后使用此列对矩阵进行排序。

,

在下面的查询中尝试此操作,它将提供所需的输出

SELECT  * 
FROM  #temp 
order by cast(replace(replace(replace(range,'-',''),'[',']','') as bigint)