SQL Server: добавляет значения небольших таблиц к значениям большой таблицы, не теряя размеры большой таблицы?

У меня 3 таблицы. Я хочу добавить соответствующие значения из второй таблицы и третьей таблицы в первую таблицу на рисунке ниже. Каждая таблица имеет идентификатор, с помощью которого они могут быть сопоставлены, ... на картинах. Первая таблица имеет 1531 строку с столбцом идентификатора и 8 другими столбцами. Эта таблица, верхняя таблица на изображениях, почти полна нулей.

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

Есть ли удобный способ добавить вторую таблицу в первую таблицу, а затем в третью таблицу к этому результату?

введите описание изображения здесь

Результат Left Join, как предложил Сужена : почему цифры не суммируются вместе?

введите описание изображения здесь

Метод 1: Объединение

 select a.id,(a.col1 + b.col1+c.col1) as col1, (a.col2 + b.col2 + c.col2) as col2, (a.col3 + b.col3 + c.col3) as col3 from table1 a left join table2 b on a.id = b.id left join table3 c on a.id = c.id; 

Метод2: Союзы

 select id,sum(col1) col1, sum(col2) col2, sum(col3) col3 from ( select id,col1,col2,col3 from table1 union all select id,col1,col2,col3 from table2 union all select id,col1,col2,col3 from table3 ) t group by id 

Дайте мне знать, если у вас есть другие критерии.

Способ 3: с различным количеством полей, поэтому используйте NULL или 0

 SELECT [MID], SUM([KEVAT 201501-04]) AS 'KEVAT 201501-04', SUM([KESA 201504-06]) AS 'KESA 201504-06', SUM([SYKSY 201507-09]) AS 'SYKSY 201507-09', SUM([TALVI 201510-12]) AS 'TALVI 201510-12', SUM([KEVAT 201601-04]) AS 'KEVAT 201601-04', SUM([KESA 201604-06]) AS 'KESA 201604-06', SUM([SYKSY 201607-09]) AS 'SYKSY 201607-09', SUM([TALVI 201610-12]) AS 'TALVI 201610-12' FROM ( SELECT * FROM TABLE1 UNION ALL SELECT [MID] ,0 AS 'KEVAT 201501-04' ,0 AS 'KESA 201504-06' ,0 AS 'SYKSY 201507-09' ,0 AS 'TALVI 201510-12' ,[KEVAT 201601-04] ,[KESA 201604-06] ,[SYKSY 201607-09] ,[TALVI 201610-12] FROM TABLE2 UNION ALL SELECT [MID] ,[KEVAT 201501-04] ,[KESA 201504-06] ,[SYKSY 201507-09] ,[TALVI 201510-12] ,0 AS 'KEVAT 201601-04' ,0 AS 'KESA 201604-06' ,0 AS 'SYKSY 201607-09' ,0 AS 'TALVI 201610-12' FROM TABLE3 ) a GROUP BY [MID] 

Если я понимаю ваш вопрос, вы можете использовать союз. Что-то вроде:

  insert into table1(col1,col2,col3,col4) (select col1,col2,col3,col4 from table2 union select col1,col2,col3,col4 from table3) 

Имена столбцов table2 и table3 должны совпадать. Используйте псевдоним для этого.

Попробуйте использовать MERGE

 --Get data from table 2 and merge into table 1 MERGE Table_1 AS TARGET USING (SELECT [ID] ,[KEVAT 201501-04] ,[KESA 201504-06] ,[SYKSY 201507-09] ,[TALVI 201510-12] FROM Table_2) AS SOURCE ON (TARGET.ID = SOURCE.ID) WHEN MATCHED THEN UPDATE SET TARGET.[KEVAT 201501-04] = SOURCE.[KEVAT 201501-04], TARGET.[KESA 201504-06] = SOURCE.[KESA 201504-06], TARGET.[SYKSY 201507-09] = SOURCE.[SYKSY 201507-09], TARGET.[TALVI 201510-12] = SOURCE.[TALVI 201510-12]; GO --Get data from table 3 and merge into table 1 MERGE Table_1 AS TARGET USING (SELECT [ID] ,[KEVAT 201601-01] ,[KESA 201604-06] ,[SYKSY 201607-09] ,[TALVI 201610-12] FROM Table_3) AS SOURCE ON (TARGET.ID = SOURCE.ID) WHEN MATCHED THEN UPDATE SET TARGET.[KEVAT 201601-01] = SOURCE.[KEVAT 201601-01], TARGET.[KESA 201604-06] = SOURCE.[KESA 201604-06], TARGET.[SYKSY 201607-09] = SOURCE.[SYKSY 201607-09], TARGET.[TALVI 201610-12] = SOURCE.[TALVI 201610-12]; GO 
  • Как присоединиться к строке «Другие»
  • Как преобразовать все теги HTML img close в соответствие с XML? (<img> до <img />)
  • Физическое соединение SQL не используется
  • Как сравнить параметры varchar в изначально скомпилированной хранимой процедуре?
  • SQL-соединение из проекта Visual C ++ Windows Form
  • Группировать строки на основе перекрытия даты
  • Как получить указанное количество предыдущих строк из указанной строки в SQL Server 2014?
  • Статистика пула ресурсов в SQL-сервере
  • IsNumeric с ошибкой: «В текущей команде произошла серьезная ошибка». SQL Server 2014 CTE
  • Обобщение функции поиска таблицы SQL с помощью exec
  • Неожиданные результаты с LAST_VALUE, CURRENT ROW и NULL
  • Interesting Posts

    SQL Выберите данные из 2 часов назад

    Конфигурация и автоматизация входа в SQL Server

    База данных: начальные ключевые столбцы в начале таблицы

    Ошибка запроса C # и SQL Server: идентификатор с несколькими частями не может быть связан

    Каковы последствия преобразования индексов кучи в кластеризованные индексы на SQL Server?

    Как получить эквивалент кода C # для инструмента сравнения VS Schema?

    Создание таблицы комментариев

    используя CASE для выбора столбца для SET в инструкции UPDATE В SQL SERVER

    наилучшая практика для пользователя sspi

    Метод executeQuery () не может принимать аргументы на PreparedStatement или CallableStatement. ошибка

    Можно ли откатить только вложенную транзакцию для автотестирования

    Как я могу отправить запрос LINQ на SQL Server, чтобы проверить, начинается ли значение столбца со словом?

    Нужно вытаскивать поля из проблемы в Sitecore

    Ошибка преобразования типа данных varchar в числовой

    Обновление sql на основе count

    Давайте будем гением компьютера.