2013-10-10 34 views
0

我有一個結果集,主要由值的列組成。但是,最左邊的列包含我用來有效標記每行的文本。當我ROLLUP,價值總,這是偉大的。我'No KS2'列中的文本會變成預期的NULL。有什麼我可以做的,用文本替換NULL例如'總'?SQL是否可以替換匯總中的值?

其他列中的所有NULL應該在那裏,我不需要替換那些。

這裏是我的結果集例如一個例子:

No KS2 6c/D- 6b/D  6a/D+ 
2a  1  NULL  NULL  
3c  3  NULL  NULL  
3b  NULL  5  NULL 
3a  NULL  NULL  6 
NULL  4  5  6 

這是我想做什麼:

No KS2 6c/D- 6b/D  6a/D+ 
2a  1  NULL  NULL  
3c  3  NULL  NULL  
3b  NULL  5  NULL 
3a  NULL  NULL  6 
Total  4  5  6 

編輯:

產生當KS2列結果集使用我已經用'No KS2'替換了NULL值。請參閱我GROUP BY下面的代碼:

GROUP BY 
     CASE Name 
      WHEN 'English' THEN 
       CASE WHEN [Ks2en] IS NULL OR [Ks2en]='' THEN 
        'No KS2' 
       WHEN [Ks2en] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2en] 
       END 
      WHEN 'Mathematics' THEN 
       CASE WHEN [Ks2ma] IS NULL OR [Ks2ma]='' THEN 
        'No KS2' 
       WHEN [Ks2ma] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2ma] 
       END 
      ELSE 
       CASE WHEN [Ks2av] IS NULL OR [Ks2av]='' THEN 
        'No KS2' 
       WHEN [Ks2av] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2av] 
       END 
      END 
      WITH ROLLUP 

編輯:這是不是重複的解決問題的辦法,這應該是沒有解決我的問題重複。我編輯了代碼來解釋差異。我已經有了一個case語句,用'No KS2'取代了我的KS2列中的NULL值。

+0

是的,沿着正確的路線。但是,我已經有了一個case語句,用'No KS2'替代了KS2列中的NULL值。我將發佈我的GROUP BY代碼。 – Matt

+0

用圓括號括起整個區域,並創建一個替代NULL的select語句。選擇* FROM(<您的完整查詢>)數據 – twoleggedhorse

+0

關於您的編輯。它**是**重複的。替換'ROLLUP'值的正確方法是使用'GROUPING'功能。使用'ISNULL'或'COALESCE'會錯誤地將總標籤應用於分組值爲'NULL'的組。由於您沒有提供SQL小提琴,所以我不打擾您向您展示如何將'GROUPING'應用於您的情況(代碼太長以至於無法評論,我當然對從頭開始設置小提琴沒有興趣) –

回答

0

事實證明這很簡單。發佈關於調查COALESCE()的評論然後將其刪除的用戶發送給我了正確的軌道。我爲函數中的列包裝了我的case語句,並且我的結果集顯示了我想要的方式。所以謝謝你,不管你是誰。

SELECT 
     COALESCE(CASE Name 
      WHEN 'English' THEN 
       CASE WHEN     
       [Ks2en] IS NULL OR [Ks2en]='' THEN 
        'No KS2' 
       WHEN [Ks2en] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2en] 
       END 
      WHEN 'Mathematics' THEN 
       CASE WHEN [Ks2ma] IS NULL OR [Ks2ma]='' THEN 
        'No KS2' 
       WHEN [Ks2ma] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2ma] 
       END 
      ELSE 
       CASE WHEN [Ks2av] IS NULL OR [Ks2av]='' THEN 
        'No KS2' 
       WHEN [Ks2av] IN ('1a','1b','1c') THEN 
        '1' 
       ELSE 
        [Ks2av] 
       END 
      END,'Total') AS KS2,...