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
...
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を参照してください。
小数点以下の最大数がわかっている場合は、文字列を部分に分割し、それらを個別に並べ替えることができます。たとえば、最大 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}
。