SQL替换case语句中的空白值

时间:2013-10-02 15:01:54

标签: sql sql-server-2008 group-by case conditional-statements

我有两张桌子:

学生(ks2en,ks2ma,ks2av)

主题(姓名)

我有以下条件语句,根据主题列出学生列中的值。然后根据各自的学生专栏对这些进行分组。

在任何组合中,我都想用'No KS2'替换结果集中的''空白值。

这是我的case语句,它有条件地从学生表中选择主题表中主题名称的相应列。

   CASE 
      WHEN COALESCE(Name, '') = 'English' THEN
        [Ks2en]
      WHEN COALESCE(Name, '') = 'Mathematics' THEN
        [Ks2ma]
      ELSE
        [Ks2av]
   END AS KS2

示例数据:

ks2en
2a
2a
3a
4c

5a
3a
2a

1c

当主题名称为“英语”时,将显示以下结果:

KS2
No KS2
1c
2a
3a
4c
5a

为了清楚起见,不要担心语句的排序,分组或条件元素,因为我已经完成了这些工作。它只是用'No KS2'替换空白值,以便它显示为上述结果集中的一组值。

1 个答案:

答案 0 :(得分:2)

怎么样:

CASE Name
WHEN 'English' THEN
    CASE WHEN [Ks2en]=NULL OR [Ks2en]='' THEN
        'No KS2'
    ELSE
        [Ks2en]
    END
WHEN 'Mathematics' THEN
    CASE WHEN [Ks2ma]=NULL OR [Ks2ma]='' THEN
        'No KS2'
    ELSE
        [Ks2ma]
    END
ELSE
    CASE WHEN [Ks2av]=NULL OR [Ks2av]='' THEN
        'No KS2'
    ELSE
        [Ks2av]
    END
END AS KS2

删除内部COALESCE,因为它们没用!