#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? Энди или Кевин?), Но чтобы добавить новый столбец в таблицу, а затем заполнить его данными, вам нужно:
-
Добавьте его (при условии, что ваша таблица называется Table и для нового столбца достаточно 100 символов):
изменить таблицу [Table] добавить [Employees] nvarchar(100) null
-
Наполните его:
обновить [таблицу] установить [Employees] = [Workers]
— или:
обновить [Таблицу] набора [Сотрудники] = [Технические специалисты]
Я полагаю, что вы действительно хотите создать новую таблицу Employees и преобразовать Workers и Technicians в отношения, взятые из нее. Для этого смотрите ссылку, которую Саймон дал вам о нормализации базы данных.
Ответ №4:
Я не совсем понимаю ваш вопрос, но вы не хотите добавлять дополнительный столбец, это приводит к (дополнительной) избыточности данных и затруднит любые будущие обновления или запросы. Используйте одно из приведенных решений запроса SELECT и серьезно подумайте о преобразовании двух существующих отдельных столбцов в один столбец. Я предлагаю вам взглянуть на нормализацию базы данных, если вы еще не знакомы с концепцией.
Комментарии:
1. На самом деле я хочу добавить дополнительный столбец, потому что мне понадобится этот столбец в будущем.