sql server — объединение таблиц в одну таблицу

#sql-server

#sql-сервер

Вопрос:

У меня есть 2 таблицы, в каждой из которых есть столбцы ‘Date’, ‘Time’ и ‘ID’ и около 100 дополнительных столбцов, которые представляют счетчики, также у меня есть главная таблица, которая содержит столбцы ‘Date’, ‘Time’ и ‘ID’, плюс в ней есть все счетчики, которые вышли издругие 2 таблицы.

Мне нужен способ обновить основные таблицы из 4 таблиц, как показано ниже:

 Table 1

Date,Time,ID,Counter_A,Counter_B

01012014,00:00:00,1,10,20

01012014,00:00:00,2,7,8

21012014,00:00:00,1,3,1


Table 2

Date,Time,ID,Counter_C,Counter_D

01012014,00:00:00,1,30,40

01012014,00:00:00,2,5,9

21012014,00:00:00,1,4,2`

Master Table

Date,Time,ID,Counter_A,Counter_B,Counter_C,Counter_D
01012014,00:00:00,1,10,20,30,40

01012014,00:00:00,2,7,8,5,9

21012014,00:00:00,1,3,1,4,2
  

Я пробовал динамический Sql с помощью INSERT, но это занимает слишком много времени, особенно у меня около 100 000 строк в каждой таблице 1 и таблице 2, и несколько раз он возвращается с ошибкой истечения времени ожидания.

Кстати, я получаю ежедневные обновления для (таблиц 1 и таблицы 2) в виде файлов CSV, есть ли какой-либо способ обновить основную таблицу, не затрачивая слишком много времени.

Подробнее:

Привет, спасибо за ваш ответ,

Позвольте мне объяснить подробнее: то, что я пытаюсь сделать, — это хранить статистику для системы, статистика — это счетчики операций, а также показатели успеха и сбоев операций и т. Д…

Я получаю почасовую статистику каждый день, я получаю их в 4 CSV-файлах, я обработал сбор этих данных в таблицы, поэтому я получаю 4 новые таблицы каждый день.

таким образом, я получаю для каждого идентификатора 24 значения для каждого счетчика, у меня есть около 300 счетчиков из всех файлов.

Основная таблица содержит все 300 столбцов, иногда, когда я экспортирую CSV-файлы из системы, я пренебрегаю некоторыми счетчиками или добавляю дополнительные счетчики (столбцы).

данные в системе находятся следующим образом: Дата Время Идентификатор ColA ColB ………. ColC холодный

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

Мой подход заключается в объединении всех счетчиков в одну таблицу, как они были в системе.

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

1. Это insert или update ?

2. Используйте ОБЪЕДИНЕНИЕ для их объединения

3. Уважаемый LIUFA, это ВСТАВКА, потому что в главной таблице должны были храниться старые значения.

4. Уважаемый Дэниел Э., я использую динамический sql, потому что таблица 1 и таблица 2 могут содержать не все столбцы в главной таблице, я делаю это, чтобы предотвратить ошибку, если столбец не существует в таблице 1 или таблице 2.

Ответ №1:

Вы можете использовать UNION ALL statement, он позволяет объединять данные из нескольких таблиц в один набор данных.
Если у вас отсутствуют столбцы (Counter_C, Counter_D в table1), вы заменяете их NULL значениями или значениями по умолчанию (0, «,…).
Если вам нужны только уникальные значения (если одно и то же значение из двух таблиц вставлять не следует), то вместо использования UNION ALL вам следует использовать UNION .

 INSERT INTO MasterTable (Date,Time,ID,Counter_A,Counter_B,Counter_C,Counter_D) 
SELECT Date,Time,ID,Counter_A,Counter_B,NULL,NULL
FROM Table1
UNION ALL 
SELECT Date,Time,ID,NULL,NULL,Counter_C,Counter_D
FROM Table2
UNION ALL
...
  

Если вы хотите ОБНОВИТЬ значения, вам нужно будет перечислить столбцы и обернуть объединенный оператор SELECT .

 UPDATE M SET Date = X.Date, Time = X.Time, ID = X.ID, Counter_A = X.Counter_A, Counter_B = X.Counter_B, Counter_C = X.Counter_C, Counter_D = X.Counter_D) 
FROM MasterTable M, (    
SELECT Date,Time,ID,Counter_A,Counter_B,NULL,NULL
    FROM Table1
    UNION ALL 
    SELECT Date,Time,ID,NULL,NULL,Counter_C,Counter_D
    FROM Table2
    UNION ALL
    ...) AS X
WHERE M.ID = X.ID
  

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

1. вот как я бы это сделал

Ответ №2:

извините, но я не понял вашего вопроса … с моей точки зрения, «Главная таблица» выглядит как соединение из T1 и T2 … если это правильно, вы можете создать представление, заменив «Главную таблицу» и следуя этой статье о том, как ее обновить