我正在使用 SQL Server 2008 R2 和 Crystal Reports XI
我有一个类型为 nvarchar 的字段
它包含一本书的内容,所以数据就像
1
3.3
1.1
4.5.6
1.4.3.1.1
11.2
....
我将如何对此列进行排序,使其在报告中显示为
1
1.1
1.4.3.1.1
3.3
4.5.6
11.2
...
我正在使用 SQL Server 2008 R2 和 Crystal Reports XI
我有一个类型为 nvarchar 的字段
它包含一本书的内容,所以数据就像
1
3.3
1.1
4.5.6
1.4.3.1.1
11.2
....
我将如何对此列进行排序,使其在报告中显示为
1
1.1
1.4.3.1.1
3.3
4.5.6
11.2
...
通过将值转换为,可以在 T-SQL 中对它们进行排序hierarchyid
:
SELECT *
FROM (
VALUES
('1'),
('3.3'),
('1.1'),
('4.5.6'),
('1.4.3.1.1'),
('11.2')
) v (version)
ORDER BY
CAST('/' + version + '/' AS hierarchyid)
;
请参阅此SQL Fiddle进行演示。
如果您知道最大小数位数,那么您可以将字符串分成几部分并单独排序。例如,如果您知道最多只有 4 个小数(分隔 5 个不同的数字),那么您可以创建 5 个公式,每个公式代表一段字符串。
//Formula {@Num1} to isolate most significant number
local stringvar array splitString := split({table.string},'.');
if isnumeric(splitString[1]) then tonumber(splitString[1]) else 0
//...and the formula {@Num2} for second most significant number
local stringvar array splitString := split({table.string},'.');
if ubound(splitString)>1 and isnumeric(splitString[2])
then tonumber(splitString[2]) else 0
现在先按{@Num1}
然后按{@Num2}
等对您的报告进行排序。