在 SSRS 中的矩阵中排序字母数字列
Ordering an alphanumeric column in a matrix in 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]
最好将 table 设计成具有某种“排序顺序”列。
但是你可以使用这个:
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)
我有一列需要在矩阵中排序,但我的问题是该列混合了数字和字符,因为它是一个范围字段,并且每个分组父级的范围不同。 分组示例如下所示
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]
最好将 table 设计成具有某种“排序顺序”列。 但是你可以使用这个:
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)