2012-12-19 84 views
1

我有一個簡單的查詢訂貨數據/分組集

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更改爲字母順序y最後倒下?

回答

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'); 
3

這應該這樣做:

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

1

你必須使用分層突破立方體分組?一般來說,我認爲它列出了成爲空值的分組。你能不能列出'用m.State,m.sex組合',然後列出'where m.state不爲null'的謂詞。可能的修復。

除此之外,您將不得不做一些事情來將空值定義爲我猜測的分組。類似於isnull(m.State_CD,'Totals'),如果您確定所有的空值都表示來自collection的總數。如果你想把它們放在最下面但是想要稍後重命名它們,你總是可以將它們重命名爲cte,臨時表,嵌套選擇等的集合,然後再重新標記它們。