Как добавить два столбца в один столбец в SQL?

#sql #sql-server #sql-update #sql-insert

#sql #sql-сервер #sql-обновление #sql-вставка

Вопрос:

У меня в таблице есть два столбца, которые называются Workers — Technicians. В Workers у меня есть имя workers, а в Technicians у меня есть имя technicians, который работает в компании. Вот как это выглядит:

Рабочие                              техники

 Andy                  Kevin
Conan                 Jason
Jay                   Ray
Donald                Daryl
Martin                .
Mark                  .(rows goes on)
.
.(rows goes on)       
  

Что я хочу сделать, так это добавить эти строки и создать столбец с именем Employees. Вот что я хочу:

Сотрудники

 Andy                  
Conan                 
Jay                   
Donald               
Martin                
Mark
Kevin
Jason
Ray
Daryl
.
.
  

Я не хочу создавать другую таблицу, я просто хочу добавить новый столбец. Как бы я это сделал?

Ответ №1:

Оператор объединения должен выполнить эту работу здесь. Что-то вроде этого:

  select Name from Workers-Technitians where Worker not null
 UNION 
 select Name from Workers-Technitians where Technitian not null
  

Имейте в виду, что оба запроса должны иметь одинаковое количество столбцов при использовании объединения

Комментарии:

1. чтобы быть более правильным SELECT Workers FROM Table UNION SELECT Technicians FROM Table

2. @Sklivvz да, это правильно, но я хочу, чтобы это было в столбце, сохраненном в моей таблице, а не просто как выражение.

3. @Sklivvz Точно, что я хочу знать, так это как добавить эти данные

Ответ №2:

Предполагая, что ваша таблица называется «staff», вы могли бы сделать что-то вроде этого.

 select distinct employees from (
  select workers as employees from staff s1
  union select technicians as employees from staff s2
) as emps
  

Возможно, вам нужно еще раз взглянуть на свой дизайн. Добавление третьего столбца у вас не получится, потому что первые два столбца представляют две строки. На самом деле, кажется, что между рабочими и техниками уже существуют принудительные отношения — они, похоже, объединены в одной записи без особой причины.

Подумайте о том, чтобы начать заново с таблицы Employee, с одним employee в строке, и отказаться от существующей таблицы. Вы можете сохранить атрибуты сотрудника в этой таблице, если требования просты, или присоединить отдельную таблицу атрибутов для более сложных случаев. В любом случае нормализация ваших данных упростит вашу жизнь, и использование объединения для объединения столбцов будет ненужным.

Комментарии:

1. union уже делает distinct (чтобы избежать поведения, которое используется union all )

2. Спасибо, @Sklivvz, это научило меня чему-то новому :).

Ответ №3:

Я также не совсем понимаю, что вы хотите сделать (в основном из-за этого: если, скажем, в строке есть «Энди» в Workers и «Кевин» в Technicians, что вы добавите в Employees? Энди или Кевин?), Но чтобы добавить новый столбец в таблицу, а затем заполнить его данными, вам нужно:

  1. Добавьте его (при условии, что ваша таблица называется Table и для нового столбца достаточно 100 символов):

    изменить таблицу [Table] добавить [Employees] nvarchar(100) null

  2. Наполните его:

    обновить [таблицу] установить [Employees] = [Workers]

    — или:

    обновить [Таблицу] набора [Сотрудники] = [Технические специалисты]

Я полагаю, что вы действительно хотите создать новую таблицу Employees и преобразовать Workers и Technicians в отношения, взятые из нее. Для этого смотрите ссылку, которую Саймон дал вам о нормализации базы данных.

Ответ №4:

Я не совсем понимаю ваш вопрос, но вы не хотите добавлять дополнительный столбец, это приводит к (дополнительной) избыточности данных и затруднит любые будущие обновления или запросы. Используйте одно из приведенных решений запроса SELECT и серьезно подумайте о преобразовании двух существующих отдельных столбцов в один столбец. Я предлагаю вам взглянуть на нормализацию базы данных, если вы еще не знакомы с концепцией.

Комментарии:

1. На самом деле я хочу добавить дополнительный столбец, потому что мне понадобится этот столбец в будущем.