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

时间:2012-12-19 18:53:02

标签: sql sql-server sql-server-2008 tsql

我有一个简单的查询

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

返回结果集,如

enter image description here

我想以STATE_CD的方式按现在的顺序排序,但有没有办法让NULLS位于结果集的底部,且STATE_CD列仍在字母顺序,没有添加CASE语句来将NULL更改为按字母顺序排列的最后一个?

3 个答案:

答案 0 :(得分:4)

按顺序使用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');

答案 1 :(得分:3)

这应该做:

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

答案 2 :(得分:1)

您是否必须使用多维数据集分组进行分层突破?一般来说,我认为它列出了成为空值的分组。你能列出'with by with m.State,m.sex',然后列出'where m.state not null'的谓词。可能的解决方法。

除此之外,你将不得不做一些事情来定义空值作为我猜的分组。与isnull(m.State_CD,'Totals')类似,如果您确定所有空值都代表集合中的总计。如果你想将它们放在底部但想要稍后重命名它们,你总是可以在cte,temp表,嵌套选择等的集合中重命名它们。然后再重新标记它们。