манипулирование таблицами sql

#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;
 

источник: https://www.w3schools.com/sql/sql_select_into.asp