我有一个简单的查询
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
的方式按现在的顺序排序,但有没有办法让NULLS位于结果集的底部,且STATE_CD
列仍在字母顺序,没有添加CASE语句来将NULL更改为按字母顺序排列的最后一个?
答案 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表,嵌套选择等的集合中重命名它们。然后再重新标记它们。