Вставка значений SQL путем объединения - PullRequest
2 голосов
/ 26 сентября 2019

Возможно, уже слишком поздно, и поэтому я застрял.Я хочу заполнить базу данных значениями, но только для тех значений, где в базе данных уже существует дата.Структура выглядит следующим образом:

CREATE TABLE dbo.TEST(ID INT IDENTITY(1,1) NOT NULL,date_time datetime)

ALTER TABLE dbo.TEST ADD "column1" FLOAT;

INSERT INTO dbo.TEST(date_time,"column1")
  VALUES ('2018-04-01 02:00:00',1),('2018-04-01 06:00:00',2),('2018-04-01 07:00:00',3) 

ALTER TABLE dbo.TEST ADD "column2" FLOAT;

, поэтому таблица выглядит следующим образом:

enter image description here

Теперь я хочу заполнить столбец2 для2:00 и 6:00 часов со значениями 20 и 21, но игнорируем значение 25. У меня есть

INSERT INTO dbo.TEST("column2")
        SELECT
            NewValues."column2"
        FROM (
          VALUES  ('2018-04-01 02:00:00',20),
                  ('2018-04-01 06:00:00',21),
                  ('2019-10-05 20:30:00',25)
              ) AS NewValues(date_time,"column2")
        INNER JOIN dbo.TEST
        ON dbo.TEST.date_time = NewValues.date_time
   WHERE dbo.TEST.date_time = NewValues.date_time   

, но это приводит к

enter image description here

что мне не хватает?

1 Ответ

2 голосов
/ 26 сентября 2019

Вы хотите update:

update t
    set column2 = NewValues.column2
    from dbo.TEST t left join
         (values  ('2018-04-01 02:00:00', 20),
                  ('2018-04-01 06:00:00', 21),
                  ('2019-10-05 20:30:00', 25)
              )  NewValues(date_time, column2)
        ON t.date_time = NewValues.date_time;
...