首页 文章

SQL条件选择:选择空值或选择非空值

提问于
浏览
-1

Original Question:

我是SQL服务器的新手,无法找到我想要的东西 . 我正在尝试在SQL中创建此逻辑:

IF [column] IS NULL THEN
    ( SELECT [value] as [columnname] )
ELSE
    ( SELECT [column] WHERE [column_value] IS NOT NULL )

基本上,如果整个列为null,我想选择并用特定值填充整个列 .

否则,如果该列不是完全为null,我只想选择其非空值(coalesce?) .

使用SQL Server 2005执行此操作的最佳方法是什么?

Answer (thanks to Josh and everyone else!)

IF EXISTS(SELECT myColumn
          FROM mytable
          WHERE myColumn IS NOT NULL)
    SELECT myColumn as colName
    FROM myTable
    WHERE myColumn is NOT NULL
ELSE
    SELECT [nullReplacementValue] as colName
    FROM myTable

Earlier clarification for the confused:

编辑:例如,如果给我一个输入表:

ColA    ColB    ColC
--------------------
A       null    null
B       null    1
C       null    null

如果我在ColB上运行此SELECT,它应该返回:

ColB
----
null
null
null

(最终我想用一些值替换“null”,但这可能会在以后出现) .

如果我在ColC上运行此SELECT,它应该返回:

ColC
----
1

2 回答

  • -1

    首先需要了解SQL中的四个基本命令 . 我们将使用以下人员表作为示例

    姓名已婚家属


    Bill True True
    简错
    Fran True True
    Ed False
    Tom False True


    选择 - (看起来您已经理解)允许您根据搜索条件从表或多个表中检索数据 .

    从姓名='比尔'的人中选择姓名

    该声明将返回以下内容

    姓名已婚家属


    Bill True True


    插入 - 允许您在数据库中输入新记录

    插入人(姓名,已婚,受抚养人) Value 观('Jill','True','False')

    此语句将使person表看起来像下表

    姓名已婚家属


    Bill True True
    简错
    Fran True True
    Ed False
    吉尔真的
    Tom False True


    删除 - 从表中删除记录

    DELETE FROM People WHERE Name ='Fran'

    此语句将使Person表如下所示

    姓名已婚家属


    Bill True True
    简错
    Ed False
    吉尔真的
    Tom False True


    最后你正在寻找的那个
    ***更新 - 允许您根据您的条件更新表格中的任意数量的记录

    直到今天,如果有人没有家属,你将dependents列留空 . 现在你的老板告诉你,没有家属的人必须在家属栏中有'假' . 你会写下面的陈述

    UPDATE Person SET Dependents ='False'WHERE Dependents = NULL

    您的表格如下所示

    姓名已婚家属


    Bill True True
    Jane False False
    Ed False False
    吉尔是对的
    Tom False True

  • 1

    如果您只是询问有关已知列中默认值的方法,如果列中的所有值都为NULL,那么您可以使用:

    IF EXISTS(SELECT myColumn FROM mytable WHERE myColumn IS NOT NULL)
        SELECT myColumn FROM myTable WHERE myColumn is NOT NULL
    ELSE
        UPDATE myTable SET myColumn = myValue
    

    这是检查您关心的列中是否至少有一个值不为空 . 如果是这意味着你想选择 . 否则,您将更新所有列,因为在请求非空列时未返回结果 .

相关问题