#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 … если это правильно, вы можете создать представление, заменив «Главную таблицу» и следуя этой статье о том, как ее обновить