繁体   English   中英

SQL根据来自不同列的值排除具有多个值的记录

[英]SQL Exclude Records with multiple values based on values from a different column

在SQL中,我有一个ID列表以及与其关联的REC号。 我的目标是删除具有0 RECNO的行,但前提是只有另一行具有非0 RECNO的行。

之前:

DLREC#  RECNO
3583   | 0
586    | 0
3589   | 0
3589   | 123456789
3609   | 0
3650   | 0
3650   | 451230149

后:

DLREC#  RECNO
3583   | 0
3586   | 0
3589   | 123456789
3609   | 0
3650   | 451230149

使用样本数据的简单方法是MAX

select
   [DLREC#]
   ,max(RECNO)
from YourTable
group by [DLREC#]

对于SQL Server

如果每个DLREC#值都更多,则另一种方法是窗口函数

with cte as(
select *
   ,RN = row_number() over (partition by [DLREC#] order by RECNO)
   ,CT = count(*) over (partition by [DLREC#]))

select
   [DLREC#]
   ,RECNO
from CTE 
where (RN != 1 and CT > 1) or (RN = 1 and CT = 1)

您可以将not existsdelete

delete t from t
    where recno = 0 and
          exists (select 1 from t t2 where t2.dlrec = t.dlrec and t2.recno <> 0);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM