2014-11-06 87 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 

现在我想与0的ShippingExpenseCode替换列第二重复值,什么正好我应该写在SQL脚本?

+1

欢迎来到Stack Overflow!我们很高兴有你:)请编辑你的问题,包括表和计算 - 链接可能会死亡,我无意点击任何东西。发布您当前拥有的SQL脚本也很有帮助。 – AHiggins 2014-11-06 16:21:44

+0

@AHiggins 1代表用户无法发布图像据我所知,所以编辑它在 – Tanner 2014-11-06 16:29:01

+5

根据哪列重复? – 2014-11-06 16:29:51

回答

1

如果重复由前三列CardCodeDocPostingDateItemCode确定:

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 2014-11-06 16:36:26

+2

@Tanner:是的,我的答案与现在被删除的图像有关。我不想再次改变答案,我希望OP会明白这一点。 – 2014-11-06 16:37:18

+0

嗨@Tim它不工作,它取代第一个实例而不是第二个实例 – 2014-11-06 16:54:04

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) 
相关问题