2013-10-10 22 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,...