在具有多个小数位的列上排序顺序

时间:2013-06-26 15:55:46

标签: sql-server-2008 crystal-reports

我正在使用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
...

2 个答案:

答案 0 :(得分:3)

可以通过将值转换为hierarchyid

来在T-SQL中对它们进行排序
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进行演示。

答案 1 :(得分:1)

如果您知道最大小数位数,那么您可以将字符串拆分为多个部分并对它们进行单独排序。例如,如果您知道最多只有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}等等对报告进行排序。