在SQL Server中查找特殊副本

在SQL Server中查找特殊副本,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在表格中有以下数据 Cust_Code ItemNo --------- ------ XYZ 150 XYZ 100 ABC 100 ABC 200 DEF 100 etc 对于给定的一对旧cust\u code和新cust\u code,我希望使用以下规则选择(和删除)重复项:如果新cust\u代码与旧代码具有相同的ItemNo,则必须选择/删除旧代码 示例:如果旧客

我在表格中有以下数据

   Cust_Code  ItemNo
   ---------  ------
   XYZ        150
   XYZ        100
   ABC        100
   ABC        200
   DEF        100
   etc
对于给定的一对旧
cust\u code
和新
cust\u code
,我希望使用以下规则选择(和删除)重复项:如果新cust\u代码与旧代码具有相同的ItemNo,则必须选择/删除旧代码

示例:如果旧客户代码='XYZ'和新客户代码='ABC',则必须删除表的第二行(XYZ 100),因为已经存在具有相同值(100)的ABC条目。 我希望我足够清楚

如何使用T-SQL查询实现这一点

我亲自在查询中声明:

DECLARE @old nvarchar(100) = 'XYZ';
DECLARE @new nvarchar(100) = 'ABC';
谢谢

用这个:

with new as (
    select cust_code 
         , itemno
      from tab
     where cust_code = @new
)
delete old
  from tab old
  join new
    on old.itemno = new.itemno
 where old.cust_code = @old

下面是一种将逻辑放入
where
子句的方法:

delete from table t
    where t.code = @OLD and
          exists (select 1 from table t2 where t2.code = @NEW and t2.itemNo = t.itemNo);

如何区分新旧代码?您的描述使用了表中未出现的事物的名称。第一:到目前为止您做了什么?第二:XYZ和ABC各有两个项目代码。如何处理?