#sql #tsql
Вопрос:
Всем привет,
у меня есть приведенная выше таблица «данная таблица», я хотел бы создать новую таблицу со столбцами «продукт», «оплачено», «Филиал» и «Филиал», как показано в «желаемой выходной таблице» с уникальным идентификатором столбца «идентификатор». Это, должно быть, простая задача sql, но я здесь. Любые конструктивные предложения или образцы кода приветствуются. thx заранее
Комментарии:
1. Пожалуйста, прочитайте это , чтобы получить некоторые советы по улучшению вашего вопроса. Изображения данных почти так же полезны, как изображения запросов, но все же они не предоставляют DDL. Что вы пробовали? Какие исследования вы провели?
Ответ №1:
Вам нужно распаковать, самый простой способ сделать это — CROSS APPLY (VALUES
SELECT
t.id,
v.product,
v.paid,
v.branchA,
v.branchB
-- INTO newTABLE -- add this to insert into a new table
FROM YourTable t
CROSS APPLY (VALUES
(t.T_product, t.T_paid, t.T_branchA, t.T_branchB),
(t.S_product, t.S_paid, t.S_Branch, t.S_Branch2)
) v (product, paid, branchA, branchB);
Ответ №2:
Вероятно, есть несколько способов сделать это. Убедитесь, что вы полностью понимаете, какой бы вариант вы ни выбрали.
Мой подход заключается в объединении первого набора столбцов со вторым набором.
SELECT *
INTO new_table
FROM (
SELECT
id
, T_product AS [product]
, T_paid AS [paid]
, T_branchA AS [branchA]
, T_branchB AS [branchB]
FROM given_table
UNION
SELECT
id
, S_product AS [product]
, S_paid AS [paid]
, S_branch AS [branchA]
, S_branch2 AS [branchB]
FROM given_table
) x;
Комментарии:
1.
UNION ALL
, а неUNION
было бы более эффективным здесь , так как тогдаDISTINCT
в производном наборе данных нет неявного (что может быть довольно дорогостоящей операцией).2. @Larnu Я бы также беспокоился о том, чтобы дважды прочитать одну и ту же таблицу, совершенно ненужную
Ответ №3:
Общий синтаксис для этого был бы следующим:
SELECT column1, column2, column3,
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
Поэтому для вашего случая это было бы:
SELECT id, product, paid, branchA, branchB
INTO desired_output_table
FROM given_table;