【问题标题】:SQL Replace blank value in case statementSQL替换case语句中的空白值
【发布时间】:2013-10-02 15:01:54
【问题描述】:

我有两张桌子:

学生(ks2en、ks2ma、ks2av)

主题(姓名)

我有以下条件语句,根据主题列出学生列中的值。随后,这些将按各自的学生列分组。

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

这是我的案例语句,它根据主题表中的主题名称有条件地从学生表中选择适当的列。

   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

当主题名称为“English”时,会显示以下结果:

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

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

【问题讨论】:

  • 我想用值“No KS2”替换空白值

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


【解决方案1】:

怎么样:

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,因为它们没有用!

【讨论】:

  • 非常感谢您的回答。但是,我已经尝试过了,分组结果仍然显示为空白。
  • 您的数据中可能有空字符串...所以,我会将空字符串替换为 null。
  • 嗨,是的,数据有空值。不知道这是否在问题中出现。你是这个意思吗?我正在尝试用字符串“No KS2”替换这些空值。
  • 我的意思是你的空值是TEXT,长度为零。我虽然他们是NULL''NULL 不同。 NULL 有很多选项要处理(在这种情况下为COALESCE)。空的TEXT 必须以不同的方式处理。
  • 我明白了。是的,它的文本长度为零。感谢您让我明白这一点。
猜你喜欢
  • 1970-01-01
  • 2017-04-02
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多