繁体   English   中英

汇总多维数据集/分组集时的数据排序

[英]Ordering of data when summarizing with cube/grouping sets

我有一个简单的查询

select distinct m.STATE_CD, m.sex,SUM(c.cost) as TotalCost
    from members as m
    inner join claims as c on c.patid=m.PATID
    group by cube(m.STATE_CD,m.sex)
    order by m.STATE_CD

返回的结果集如下

在此处输入图片说明

我想按STATE_CD的方式按STATE_CD进行排序,但是有没有一种方法可以使STATE_CD位于结果集的底部,而STATE_CD列仍按字母顺序排列,而无需添加CASE语句来更改NULL到按字母顺序落在最后的东西?

按以下顺序使用ISNULL:

DECLARE @test TABLE (STATE CHAR(2));

INSERT @test (STATE)
SELECT NULL
UNION ALL
SELECT 'AK'
UNION ALL
SELECT 'AL'
UNION ALL 
SELECT 'AR';

/*Returns null first*/
SELECT * FROM @test ORDER BY STATE

/*Returns null last*/
SELECT * FROM @test ORDER BY ISNULL(STATE,'ZZ');

应该这样做:

ORDER BY CASE WHEN m.STATE_CD IS NULL THEN 2 ELSE 1 END, m.STATE_CD

您是否必须使用多维数据集分组进行层次划分? 通常,我认为它列出了成为空值的分组。 您能否仅列出“与m.State,m.sex分组”,然后列出“其中m.state不为null”的谓词。 可能的修复。

除此之外,您将不得不做一些将空值定义为分组的事情。 如果您确定所有null都代表集合中的总数,则类似于isull(m.State_CD,'Totals')。 如果要在底部放置它们,但以后要重命名,则可以始终将它们重命名为cte,temp表,嵌套select等的集合。然后在以后重新标记它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM