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

时间:2012-04-23 16:53:36

标签: sql sql-server-2005 select null

原始问题:

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

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

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

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

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

回答(感谢Josh和其他所有人!)

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

早先澄清困惑:

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

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

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

ColB
----
null
null
null

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

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

ColC
----
1

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:-1)

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

名称已婚家属
------- ---------- ----------------
比尔真真
简假
弗兰真真
埃德假
汤姆假真


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

选择名称       来自人    名称='比尔'

本声明将返回以下

名称已婚家属
------- ---------- ----------------
比尔真真


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

插入人物            (姓名,已婚,家属)      VALUES            ('Jill','True','False')

此声明会使人员表看起来如下表

名称已婚家属
------- ---------- ----------------
比尔真真
简假
弗兰真真
埃德假
吉尔真
汤姆假真


删除 - 从表中删除记录

DELETE FROM People WHERE Name ='Fran'

此声明将使Person表看起来如下

名称已婚家属
------- ---------- ----------------
比尔真真
简假
埃德假
吉尔真
汤姆假真


最后你正在寻找的那个 ***更新 - 允许您根据您的标准更新您的表格以获取任意数量的记录

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

更新人    SET Dependents ='False'  WHERE Dependents = NULL

您的表格如下所示。
名称已婚家属
------- ---------- ----------------
比尔真真
简假 假
埃德假假
吉尔对错
汤姆假真