将表复制到新表中并在SQL Server 2008上添加新列

时间:2014-05-23 16:00:03

标签: sql sql-server sql-server-2008

我需要将表复制到SQL Server 2008上的新表中。 另外,在新表中添加一个新列。

新列的值取决于新表与另一个表之间的比较结果。

实施例,

表1:

     col1    col2   col3
     abc    346   6546
     hth     549   974

预期表1_new:

       col1   col2  col3  col4
       abc    346   6546   1
       hth     549   974    0 

表2:

   col1 
    abc    
    sfsdf

如果Table2的col1出现在Table1 col1中,则在Table1_new中将col4标记为1,否则标记为0。

代码不起作用

SELECT *, 
(
      SELECT 1 as col4
       FROM Table2 as a 
       INNER JOIN  Table1 as b
       on b.col1 = a.col1

      SELECT 0 as col4
       FROM Table2 as a 
       INNER JOIN  Table1 as b
       on b.col1 <> a.col1  # I do not know how to do this !!!
)
 INTO table1_new
 FROM table1

任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:3)

您可以使用外部联接:

SELECT          table1.col1, col2, col3, 
                CASE WHEN table2.col1 IS NULL THEN 0 ELSE 1 END AS col4
INTO            table1_new
FROM            table1
LEFT OUTER JOIN table2 ON table1.col1 = table2.col1

答案 1 :(得分:2)

您可以通过多种方式完成此操作。以下内容在exists语句中使用case子句:

insert into table1_new(col1, col2, col3, col4)
    select col1, col2, col3,
           (case when exists (select 1 from table2 t2 where t2.col1 = t1.col1)
                 then 1 else 0
            end)
    from table1 t1;

您也可以使用left outer join执行此操作,但如果t2有重复项,则存在重复的风险。

答案 2 :(得分:0)

INSERT INTO T2
  SELECT COL1,COL2,COL3, (COL1+COL2) FROM T1

请注意,您可以运行其他表达式甚至是函数来代替(COL1 + COL2)部分。

答案 3 :(得分:0)

使用CASE

尝试这样的操作
SELECT 
   CASE 
       WHEN b.col1 = a.col1 THEN 1 
       ELSE 0 
   END as col4
FROM Table1 as a 
    LEFT JOIN Table2 as b
    on b.col1 = a.col1

编辑:Table1应该是@Muerniks答案中提到的左表。

答案 4 :(得分:0)

除了其他人已经建议的内容之外:如果您无法一步解决问题,请尝试缩小步骤。例如。首先将Table1.col4初始化为零:

INSERT INTO Table1_new (col1,col2,col3,col4)
SELECT col1,col2,col3,0
FROM Table1

之后,您只需要识别Table2中具有匹配伙伴的记录,这是一个经典的内部联接:

UPDATE t1 SET col4=1
FROM Table1_new t1
    JOIN Table2 t2 ON t2.col1=t1.col1