具有多个条件的窗口函数从表中删除记录

问题描述 投票:0回答:1

这是我的桌子:

我需要删除那些有 NL46 ShopCode 的记录,但前提是 ProductCode 具有 ShopCode 'FR43'、'FR44' 或 'FR45'。 如果这些 ShopCode 不属于 ProductCode,我只需要保留 NL46 的行。

我使用了WindowFunction:

DELETE FROM MyTable
WHERE ShopCode = 'NL46' AND SUM(CASE WHEN SHOPCODE = 'NL46' THEN 0 ELSE 1) OVER  PARTITION BY ProductCode > 0

但是不起作用。

令人困惑的是还有其他ShopCodes我不知道如何处理。

sql window-functions sql-delete partition-by
1个回答
0
投票

我只需使用

EXISTS
来确保“FR43”、“FR44”和“FR45”中至少之一也存在。

DELETE FROM MyTable m1
WHERE ShopCode = 'NL46'
  AND EXISTS (SELECT * FROM MyTable m2
              WHERE m2.ProductCode = m1.ProductCode 
                AND m2.ShopCode IN ('FR43', 'FR44', 'FR45'))
© www.soinside.com 2019 - 2024. All rights reserved.