2014-11-06 3 views
0

У меня есть записи данных, которые снова на основе некоторых таблиц и расчетов, и мой вывод выглядитЗаменить второй экземпляр повторяющихся значений с 0

ItemCode LineTotalSum1 ShippingExpenseCode TotalShippingAmt 
Item_O  9140.5   10     13.24 
Item_O  9140.5   13     6.62 
Item_O  9140.5   6     744 
Item_P  9099    10 <- 0 here  13.24 
Item_P  9099    6 <- 0 here  744 

Теперь я хочу, чтобы заменить второе значение дублированного на колонке ShippingExpenseCode с 0, Что точно я должен писать на SQL-скрипт?

+1

Добро пожаловать в переполнение стека! Мы рады иметь вас :) Пожалуйста, отредактируйте свой вопрос, чтобы включить таблицы и вычисления - ссылки могут исчезнуть, и я не собираюсь ничего нажимать. Также было бы полезно опубликовать SQL-скрипт, который у вас есть. – AHiggins

+0

@AHiggins 1 rep пользователи не могут размещать изображения, насколько я знаю, поэтому отредактировали его в – Tanner

+5

Дубликат в соответствии с какими столбцами? –

ответ

1

Если дубликаты определяются первые три колонки CardCode, DocPostingDate и ItemCode:

WITH CTE AS 
(
    SELECT CNT = COUNT(*) OVER (PARTITION BY CardCode, DocPostingDate, ItemCode), * 
    FROM dbo.TableName t 
) 
UPDATE CTE SET ShippingExpenseCode = 0 
WHERE CNT > 1 
+0

Изображение было более полезным для вашего ответа, я думаю. OP отредактировал изображение и добавил данные вместо этого столбца. Может стоить откат? – Tanner

+2

@Tanner: да, мой ответ связан с изображением, которое теперь удалено. Я не хочу снова менять ответ, я надеюсь, что OP получит смысл. –

+0

Привет @Tim это не работает, он заменяет первый экземпляр вместо второго экземпляра –

0

я получил сценарий, чтобы заменить весь второй или больший экземпляр с 0, используя следующий сценарий.

Update T1 Set T1.TotalShippingAmt = 0,TotalShippingVAT = 0 
from dbo.Table 
where Row <> (Select MIN(Row) from dbo.Table T2 
    where  
     T2.ShippingExpenseCode = T1.ShippingExpenseCode And 
     T2.CardCode = T1.CardCode And T2.DocPostingDate = T1.DocPostingDate)