在SSRS

时间:2016-04-27 08:14:16

标签: sql-server reporting-services

我在varchar中的数据有时是数字,有时是text。 我想在分组中将它从0到100和A到Z排序,但是它返回10,11,... 2它适用于文本,即A,B,C ......

我是否正在使用报告构建器2014。

2 个答案:

答案 0 :(得分:0)

您可以在CASE子句中使用ORDER BY表达式:

;WITH Tbl(val) AS(
    SELECT '1' UNION ALL
    SELECT '10' UNION ALL
    SELECT '2' UNION ALL
    SELECT '3' UNION ALL
    SELECT '15' UNION ALL
    SELECT 'A' UNION ALL
    SELECT 'B' UNION ALL
    SELECT 'D' UNION ALL
    SELECT 'E' UNION ALL
    SELECT 'F' UNION ALL
    SELECT 'Z'
)
SELECT *
FROM Tbl
ORDER BY
    CASE WHEN val NOT LIKE '%[^0-9]%' THEN 0 ELSE 1 END,
    CASE WHEN val NOT LIKE '%[^0-9]%' THEN CAST(val AS INT) END,
    val
如果NOT LIKE '%[^0-9]%'包含非数字字符,

val将返回false。

答案 1 :(得分:0)

向组属性添加三个排序参数:

排序方式:=CInt(IIF(Fields!ID.Value like "[0-9]*", 0, 1)) [A到Z]排序

然后:=CInt(IIF(Fields!ID.Value like "[0-9]*", Fields!ID.Value, 1)) [A到Z] 排序

然后通过:=Fields!ID.Value [A到Z]排序