2011-01-12 56 views
2

我已经写了下面的TSQL在一份报告中使用:在指定的顺序排序矩阵报表列

SELECT  patcnty, CASE WHEN CAST(age_yrs AS int) <= '5' THEN 'Ages 5 and Younger' WHEN CAST(age_yrs AS int) BETWEEN '6' AND 
        '17' THEN 'Ages 6 to 17' WHEN CAST(age_yrs AS int) BETWEEN '18' AND '44' THEN 'Ages 18 to 44' WHEN CAST(age_yrs AS int) BETWEEN '45' AND 
        '64' THEN 'Ages 45 to 64' WHEN CAST(age_yrs AS int) >= '65' THEN 'Ages 65 and Older' END AS AgeGroup, 
        CASE WHEN patcnty = '54' THEN 'Tulare' WHEN patcnty = '16' THEN 'Kings' WHEN patcnty = '15' THEN 'Kern' WHEN patcnty = '10' THEN 'Fresno' END 
        AS County, oshpd_id, age_yrs 
FROM   OSHPD2009 
WHERE  (patcnty IN ('10', '15', '16', '54')) AND (age_yrs <> ' ') 

我创建了一个SSRS 2005矩阵报表,并放置AgeGroup为我的专栏,县作为我行。当显示报告时,列的顺序是:年龄18至44岁,年龄45至64岁,年龄5岁以及年龄,年龄6至1​​7以及年龄65和年龄。这是有道理的,我设置组的排序顺序为升序。

如何更改该组排序顺序矩阵列以这种方式进行排序: 年龄5和年轻,年龄为6〜17,年龄18到44,年龄45到64和65岁及以上?

非常感谢您的帮助!

回答

3

经过一番小小的挖掘,我决定告诉SSRS需要按什么顺序排序组。因此,在列分组排序屏幕,我加的

=iif(Fields!AgeGroup.Value="Ages 5 and Younger","1", 
iif(Fields!AgeGroup.Value="Ages 6 to 17","2", 
iif(Fields!AgeGroup.Value="Ages 18 to 44","3", 
iif(Fields!AgeGroup.Value="Ages 45 to 64","4", 
iif(Fields!AgeGroup.Value="Ages 65 and Older","5","Other"))))) 

基本上,这迫使SSRS到组的顺序我指定排序表达式通过指定5岁及以下的值为1,因此,它是第一个排序组等。我的报告现在像一个魅力工作!

2

或者您可以修改您的源表格以包含AGe_Group订单的新列。在SSRS上,您可以根据新的列顺序进行排序。澄清:

Newcolumn int 

Set NewColumn = 1 
where AgeGroup = "Ages 5 and Younger" 

Set NewColumn = 2 
where AgeGroup = ="Ages 6 to 17" 

Set NewColumn = 3 
where AgeGroup = Ages 18 to 44"