Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 扭曲复制_Sql_Sql Server 2012 - Fatal编程技术网

Sql 扭曲复制

Sql 扭曲复制,sql,sql-server-2012,Sql,Sql Server 2012,我面临着从一个有2.5亿行的表中删除重复项的挑战 为了便于使用,假设我们有三列 帐户、费用代码、文件名 现在,扭转 如果重复的帐户和费用代码组合出现在同一个文件名中,则允许重复的帐户和费用代码组合,但如果帐户和费用代码组合正好存在于另一个文件名中,则应删除重复的帐户和费用代码组合 我已经尝试了(分区方式)上的ROW_NUMBER()并获得了副本,但没有重复我要的“其他文件”副本 ACCOUNT CODE FILE_NAME 001 00001 A.TXT 001

我面临着从一个有2.5亿行的表中删除重复项的挑战

为了便于使用,假设我们有三列

帐户、费用代码、文件名

现在,扭转

如果重复的帐户和费用代码组合出现在同一个文件名中,则允许重复的帐户和费用代码组合,但如果帐户和费用代码组合正好存在于另一个文件名中,则应删除重复的帐户和费用代码组合

我已经尝试了(分区方式)上的ROW_NUMBER()并获得了副本,但没有重复我要的“其他文件”副本

ACCOUNT   CODE    FILE_NAME
001       00001   A.TXT
001       00001   A.TXT
001       00001   A.TXT
001       00001   B.TXT
001       00001   C.TXT
B.txt和C.txt将被删除

我尝试了(分区方式)上的ROW_NUMBER()并获得了重复项,但没有找到我要的重复项“other file duplicate”

ACCOUNT   CODE    FILE_NAME
001       00001   A.TXT
001       00001   A.TXT
001       00001   A.TXT
001       00001   B.TXT
001       00001   C.TXT
这是我尝试过的完整代码,但不确定如何对同一文件的行号进行分组


    SELECT TB1.[CLIENT_FACILITY_ID], TB1.[ACCOUNT], TB1.[CHARGE_DESC], TB1.[CHARGE_CODE], TB1.[CHARGE_TYPE], TB1.[BATCH_DATE], 
    TB1.[CHARGE_DATE], TB1.[CHARGE_QTY], TB1.[CHARGE_AMT], TB1.[HCPCS], TB1.[RC], TB1.[FILE_NAME], TB1.[MODIFIER], TB1.[POA], TB1.[POSTING_DATE], TB1.ROW_NUMBER
    FROM
    (SELECT [CLIENT_FACILITY_ID], [ACCOUNT], [CHARGE_DESC], [CHARGE_CODE], [CHARGE_TYPE], [BATCH_DATE], 
    [CHARGE_DATE], [CHARGE_QTY], [CHARGE_AMT], [HCPCS], [RC], [FILE_NAME], [MODIFIER], [POA], [POSTING_DATE],
    ROW_NUMBER() OVER (PARTITION BY [CLIENT_FACILITY_ID], [ACCOUNT], [CHARGE_DESC], [CHARGE_CODE], [CHARGE_TYPE], [BATCH_DATE], 
    [CHARGE_DATE], [CHARGE_QTY], [CHARGE_AMT], [HCPCS], [RC], [MODIFIER], [POA], [POSTING_DATE], [FILE_NAME] 
    ORDER BY [CLIENT_FACILITY_ID], [ACCOUNT], [CHARGE_DESC], [CHARGE_CODE], [CHARGE_TYPE], [BATCH_DATE], 
    [CHARGE_DATE], [CHARGE_QTY], [CHARGE_AMT], [HCPCS], [RC], [MODIFIER], [POA], [POSTING_DATE]) ROW_NUMBER
    FROM DAT_CHARGES
    WHERE ACCOUNT LIKE 'O%') TB1
    WHERE TB1.ROW_NUMBER > 1

我需要能够提供在本例中被视为重复的所有行的列表


谢谢您的时间。

如果您想保留
文件名
的值最多的行(对于给定的组),您可以使用窗口功能来识别重复项:

select t.*
from (select dc.*,
             dense_rank() over (partition by account, code order by cnt_acf desc, filename) as seqnum
      from (select dc.*,
                   count(*) over (partition by account, code, filename) as cnt_acf
            from dat_charges
           ) dc
     ) dc
where seqnum > 1;

如果要保留
filename
的值最多的行(对于给定的组),可以使用窗口函数来识别重复项:

select t.*
from (select dc.*,
             dense_rank() over (partition by account, code order by cnt_acf desc, filename) as seqnum
      from (select dc.*,
                   count(*) over (partition by account, code, filename) as cnt_acf
            from dat_charges
           ) dc
     ) dc
where seqnum > 1;

不带窗口功能,使用CTE和
按帐户、代码、文件名分组以获取每个组中不重复的文件名:

with cte as (
  select account, code
  from dat_charges
  group by account, code
  having count(*) = 1
)
select d.account, d.code, d.file_name
from dat_charges d left join cte c
on c.account = d.account and c.code = d.code
where c.account is null
group by d.account, d.code, d.file_name
having count(*) = 1

请参阅不带窗口功能、带有CTE和
按帐户、代码、文件名分组的。

,以获取每个组中不重复的文件名:

with cte as (
  select account, code
  from dat_charges
  group by account, code
  having count(*) = 1
)
select d.account, d.code, d.file_name
from dat_charges d left join cte c
on c.account = d.account and c.code = d.code
where c.account is null
group by d.account, d.code, d.file_name
having count(*) = 1

请参阅。

谢谢您的回复。您提出了另一个我没有预料到的障碍。我将尝试您的代码并查看结果。虽然这很有效,但客户已经放弃了他们所要求的功能。我感谢你们的努力。谢谢你们的回复。你们提出了另一个我没有预料到的障碍。我将尝试您的代码并查看结果。虽然这很有效,但客户已经放弃了他们所要求的功能。谢谢你的努力,谢谢你的回复。客户完全改变了主意,但我非常感谢您的回复。谢谢您的回复。客户完全改变了主意,但我非常感谢您的回复。