Как разделить UpdateTarget и Filter - PullRequest
       13

Как разделить UpdateTarget и Filter

0 голосов
/ 14 февраля 2020

Представьте себе следующую таблицу со столбцами

TrackingID | CompletionIndicator | Flag2

Теперь я хочу подсчитать все позиции на уровне идентификатора отслеживания с помощью Completion Indicator = 0, но хочу обновить на уровне идентификатора отслеживания.

Ниже Обновлены только строки кода с 0. (логически!). Но как я могу отделить фильтр и цель обновления?

UPDATE UPDATETarget
SET Flag2 = New_Index
FROM (
    SELECT Flag2
        ,COUNT(*) OVER (
            PARTITION BY TrackingID ORDER BY id DESC
            ) AS New_Index
    FROM [dbo].Feedback
    WHERE CompletionIndicator = 0
    ) AS UPDATETarget

1 Ответ

0 голосов
/ 14 февраля 2020

Если я вас правильно понял, в этой таблице может быть несколько записей TrackingID. Так что, вероятно, это будет делать то, что вы хотите сделать, немного по-старому, с WITH это более рекомендуется

UPDATE FB
SET Flag2 = Src.NewIndex
FROM [dbo].Feedback AS FB
    JOIN    
        (SELECT TrackingID, COUNT(*) AS NewIndex
        FROM [dbo].Feedback 
        WHERE CompletionIndicator = 0
        GROUP BY TrackingID) AS Src
        ON Src.TrackingID = FB.TrackingID;

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

SELECT FB.*, Src.NewIndex
FROM [dbo].Feedback AS FB
    JOIN    
        (SELECT TrackingID, COUNT(*) AS NewIndex
        FROM [dbo].Feedback 
        WHERE CompletionIndicator = 0
        GROUP BY TrackingID) AS Src
        ON Src.TrackingID = FB.TrackingID;
...