如果在子查询SQL Server中ELSE

时间:2012-10-29 07:24:34

标签: sql-server if-statement subquery

我有2个表,如下所示,并相应地从ftable将数据插入f_table。如果field_3存在,我想将field3插入field_3,否则将field_4插入field3

我该怎么做?非常感谢任何回复。

CREATE TABLE ftable
(
field1 int null,
field2 int null,
field3 char(1)
);

CREATE TABLE f_table
(
field_1 int null,
field_2 int null,
field_3 char(1),
field_4 char(1)
);

INSERT INTO ftable (field1, field2, field3) 
    SELECT (field_1, field_2, field_3) 
    FROM f_table;

2 个答案:

答案 0 :(得分:3)

如果field_3存在,则不确定的真正含义 - 因为它是表格的一部分,总是列存在......

猜测你可能意味着:如果它是NOT NULL - 在这种情况下,请使用此CASE声明:

INSERT INTO ftable (field1, field2, field3) 
    SELECT 
       field_1, field_2, 
       CASE
           WHEN field_3 IS NOT NULL THEN field_3
           ELSE field_4
       END
    FROM f_table;

更新:根据w0lf的建议,你也可以使用:

INSERT INTO ftable (field1, field2, field3) 
    SELECT 
       field_1, field_2, 
       ISNULL(field_3, field_4)
    FROM f_table;

使它更紧凑 - 但在我看来,它的可读性稍差。但这样可以正常工作 - 如果field_3为NULL,则会插入field_4

答案 1 :(得分:1)

假设您的意思是field_3NULL,这是一个使用COALESCE的好地方:

INSERT INTO ftable (field1, field2, field3) 
SELECT field_1, field_2, COALESCE(field_3,field_4) 
FROM f_table;

COALESCE

  

返回其参数中的第一个非空表达式。