У меня есть таблица, и я хочу обновить все ID = 2 до ID = 1, при условии, что даты разные, потому что есть ограничение на столбец Date, он должен быть уникальным.

enter image description here

Я использую этот код, но не знаю, как обновить его с таким ограничением.

update table
set ID = 1
where ID = 2

Есть ли способ сгруппировать по этим датам, и если счетчик (дата)> 1, не обновлять таблицу?

Я ожидаю этот вывод:

enter image description here

0
Nitin Deb 24 Окт 2018 в 01:15

2 ответа

Лучший ответ

Вы можете добавить условие NOT EXISTS, чтобы исключить из обновления те строки, дата которых существует с ID = 1.

update T1
set T1.ID = 1
From MyTable T1
where T1.ID = 2
AND Not Exists (Select 1 from MyTable T2 Where T2.Id = 1 and T2.Date = T1.Date)
1
Vinit 23 Окт 2018 в 22:26

Как насчет использования соединения

CREATE TABLE T
(
  ID INT,
  [Date] DATE,
  Amt INT
);

INSERT INTO T VALUES
(1, '2018-07-17', 450),
(1, '2018-07-18', 500),
(1, '2018-07-19', 600),
(2, '2018-07-17', 850),
(2, '2018-07-18', 950),
(2, '2018-07-19', 900),
(2, '2018-07-20', 380),
(2, '2018-07-21', 920);

UPDATE T1
SET T1.ID = 1
FROM T T1 INNER JOIN
          (
            SELECT MAX(ID) ID, [Date]
            FROM T
            GROUP BY [Date]
            HAVING COUNT([Date]) = 1
          ) T2 ON T1.[Date] = T2.[Date]
WHERE T1.ID = 2;

SELECT *
FROM T;
1
Sami 24 Окт 2018 в 00:27
52958554