-1

原始问题:

我是 SQL Server 的新手,找不到我要找的东西。我正在尝试在 SQL 中创建此逻辑:

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

基本上,如果整列为空,我想选择并用某个值填充整列。

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

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

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

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
4

2 回答 2

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

这是检查您关心的列中是否至少有一个值不为空。如果是,则表示您要选择。否则,您将更新所有列,因为在请求非空列时您没有返回结果。

于 2012-04-23T17:23:24.800 回答
-1

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

姓名 已婚家属
------- ---------- ----------------
Bill True True
J​​ane False    
Fran True True
Ed False    
Tom False True


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

从姓名 = 'Bill' 的人中选择姓名

此语句将返回以下

Name Married Dependents
------- ---------- ----------------
Bill True True


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

插入人(姓名、已婚、家属)值('Jill'、'True'、'False')

此语句将使人员表看起来像下面的表

Name Married Dependents
------- ---------- ----------------
Bill True真
简 假    
弗兰 真 真
埃德 假    
吉尔 真         
汤姆 假 真


删除 - 从表中删除记录

从名称 = 'Fran' 的人中删除

此语句将使 Person 表如下所示

Name Married Dependents
-------- ---------- ----------------
Bill True True J
​​ane假         
Ed 假    
Jill 真         
汤姆 假 真


最后是您要查找的
***Update - 允许您根据您的条件为任意数量的记录更新表

直到今天,如果某人没有受抚养人,您将家属列为空。现在你的老板告诉你,没有家属的人必须在家属栏中填写“False”。您将编写以下语句

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

您的表格将如下所示

Name Married Dependents
------- ---------- ----------------
Bill True True
J​​ane False False
Ed假 假
吉尔 真 假
汤姆 假 真

于 2012-04-23T17:56:58.390 回答