Обновление SQL из одной таблицы в другую на основе группы по условию - PullRequest
0 голосов
/ 15 марта 2019

У меня есть две таблицы, которые ссылаются только на один столбец между ними.

оборудование (E)

key

Работа (J)

key
name
isdeleted

Таблица E должна быть обновлена ​​с минимальным J.Key с тем же J.Name, где J.Deleted = 0. Таким образом, в дальнейшем E.Key = 18 будет обновлено до 12.

Е

18 3

12, "This", 0
6, "This", 1
18, "This", 0
3, "That", 0

Я думаю, что мне нужно обновить, используя min (ключ) и группировку по имени и ключу, где isdeleted - 0, но не могу понять, как все это собрать вместе.

Ответы [ 3 ]

0 голосов
/ 15 марта 2019

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

;with mins as
(     
    select      a.pid
                ,b.pid  min_pid
    from        #j  a
    cross apply (
                    select      top 1
                                b.*
                    from        #j  b
                    where       b.name = a.name
                            and b.isdeleted = 0
                    order by    b.pid
                )   b
    where       a.isdeleted = 0                     
)

update      a
set         pid = b.min_pid
from        #e      a
inner join  mins    b   on  b.pid = a.pid
0 голосов
/ 15 марта 2019

Немного другой подход с использованием CTE для получения минимумов:

WITH jobUpdates AS
(
    SELECT [key], 
           MIN([key]) OVER (Partition By Name) AS MinKey
    FROM jobs
    WHERE IsDeleted = 0
)

UPDATE e
SET e.[Key]
FROM equipment e
INNER JOIN jobUpdates j
    ON j.[key] = e.[key];
0 голосов
/ 15 марта 2019

Пожалуйста, попробуйте следующий запрос для обновления E таблицы (пожалуйста, проверьте его перед выполнением в PROD, выполнив сначала выбор вместо обновления) -

update E set
   E.[key] =
   (select min(J1.[key]) from Job J1 where J1.name = J.name and J1.isdeleted = 0)
from Equipment E
inner join Job J on J.[key] = E.[key]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...