скопируйте таблицу в новую таблицу и добавьте новый столбец на 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 отображается в таблице 1 col1, отметьте col4 как 1 в таблице1_new, иначе отметьте как 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 

Любая помощь будет оценена по достоинству.

Вы можете использовать внешнее соединение:

 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 

Вы можете сделать это несколькими способами. В case используется условие exists :

 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 имеет дубликаты.

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

Обратите внимание, что вместо секции (COL1 + COL2) вы можете запускать другие выражения или, возможно, даже функцию.

Попробуйте что-то подобное с помощью 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 

EDIT: Table1 должна быть левой таблицей, как указано в ответе @Muerniks.

В дополнение к тому, что уже предлагали другие: если вы не можете решить проблему за один шаг, постарайтесь сделать меньшие шаги. Например, сначала инициализируйте Table1.col4 с нулем:

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

После этого вам нужно будет только идентифицировать записи, имеющие соответствующие партнеры в таблице 2, которые являются классическим внутренним соединением:

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

Выполнять функцию внутри просмотра SQL-сервер

Есть ли способ сделать этот UDF детерминированным?

Оценки производительности сеанса ASP.NET

Ранжирование строк с использованием функции SQL Server Rank без пропусков номера ранга

Как я могу исследовать данные в базе данных SQL, включая внешние таблицы?

Получение ошибки при вложенном запросе

Запустить консольное приложение из SQL Server после асинхронного запуска обновления таблицы?

Объединение двух инструкций UPDATE с одной инструкцией SET с предложением WHERE и одним SET без

Доступ к контексту внутри Up в DbMigration

Являются ли хранимые процедуры CLR предпочтительными над хранимыми процедурами TSQL в SQL 2005+?

как показывать фотографии по списку радиокнопки?

Как связать разные значения в столбце в соответствии с одним значением другого поля?

Сервер MSDTC на сервере недоступен

Не удается найти, какая строка вызывает ошибку преобразования

Различные типы выражения Common Table

Давайте будем гением компьютера.