Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 2008 - Fatal编程技术网

SQL-删除重复行

SQL-删除重复行,sql,sql-server-2008,Sql,Sql Server 2008,我开发了以下SQL。基本上有两张桌子。在SQL的第一部分中,我将表1连接到表2,并从表1中提取所有记录,从表1中提取匹配的记录。然后,我对同一事物进行并集,但这次,我将表2连接到表1,并从表2中提取所有记录,仅从表1中提取匹配的记录 查询的每一半中的并集都是,因此我可以在同一列中同时获得固定资产帐户和累计折旧帐户 我需要这样做,因为表1中可能有数据,而不是表2,我需要确保我得到所有这些差异。正如我所料,结果中返回了重复的行。我有几个问题: 如何消除重复的结果 我正在计算查询的每一半的差异。是否有

我开发了以下SQL。基本上有两张桌子。在SQL的第一部分中,我将表1连接到表2,并从表1中提取所有记录,从表1中提取匹配的记录。然后,我对同一事物进行并集,但这次,我将表2连接到表1,并从表2中提取所有记录,仅从表1中提取匹配的记录

查询的每一半中的并集都是,因此我可以在同一列中同时获得固定资产帐户和累计折旧帐户

我需要这样做,因为表1中可能有数据,而不是表2,我需要确保我得到所有这些差异。正如我所料,结果中返回了重复的行。我有几个问题:

如何消除重复的结果

我正在计算查询的每一半的差异。是否有更好的方法或地点进行此计算

这样做的更好方法是SQL吗

我很感谢你在这些问题上的帮助

SELECT
    a.FA_ACCT,
    a.ERACBR,
    a.deptid,
    a.FA_AMT,
    pgal.pstd_ttl_amt,
    CASE WHEN pgal.pstd_ttl_amt IS NULL THEN a.FA_AMT
    ELSE a.FA_AMT - pgal.pstd_ttl_amt END AS DIFF

FROM 

(SELECT 
            pdr.account_fa AS FA_ACCT,
            ir.erac_branch_lgcy_cd AS ERACBR,
            pdr.deptid,
            SUM(pdr.COST) AS FA_Amt

FROM PSFS.PS_DEPR_RPT pdr 

LEFT JOIN INTGRT_RPT.DIM_LOCATION ir ON pdr.deptid = ir.erac_branch_ps_org_cd AND ir.curr_lrd_row_flg = 1

WHERE pdr.BUSINESS_UNIT = 'A0465'
AND pdr.BOOK = 'PERFORM'
AND pdr.FISCAL_YEAR = 2015
AND pdr.ACCOUNTING_PERIOD = 8
AND pdr.GROUP_ASSET_FLAG <> 'M'
--AND ( ? is null or soh.REGION_CD = ?)

GROUP BY FA_ACCT, ERACBR, deptid

UNION All

SELECT
pdr.account_ad AS FA_ACCT,
ir.erac_branch_lgcy_cd AS ERACBR,
pdr.deptid,
SUM(pdr.depr_ltd) AS FA_Amt

FROM PSFS.PS_DEPR_RPT pdr 

LEFT JOIN INTGRT_RPT.DIM_LOCATION ir ON pdr.deptid = ir.erac_branch_ps_org_cd AND ir.curr_lrd_row_flg = 1

WHERE pdr.BUSINESS_UNIT = 'A0465'
AND pdr.BOOK = 'PERFORM'
AND pdr.FISCAL_YEAR = 2015
AND pdr.ACCOUNTING_PERIOD = 8
AND pdr.GROUP_ASSET_FLAG <> 'M'
--AND ( ? is null or soh.REGION_CD = ?)

GROUP BY FA_ACCT, ERACBR, deptid ) a

LEFT JOIN PSFS.PS_GL_ACCT_LDGR PGAL ON a.deptid =pgal.grp_br_ps_org_id
    AND a.fa_acct = pgal.acct_nbr
    AND pgal.fiscal_yr_mth_nbr = 201508

GROUP BY 1,2,3,4,5,6

UNION ALL  

SELECT 
pgal.acct_nbr AS FA_ACCT,
ir.erac_branch_lgcy_cd AS ERACBR,
pgal.grp_br_ps_org_id,
b.FA_AMT,
pgal.pstd_ttl_amt,

CASE WHEN b.fa_amt IS NULL THEN pgal.pstd_ttl_amt
    ELSE b.FA_AMT - pgal.pstd_ttl_amt END AS DIFF

FROM psfs.ps_gl_acct_ldgr pgal

LEFT JOIN INTGRT_RPT.DIM_LOCATION ir ON pgal.grp_br_ps_org_id = ir.erac_branch_ps_org_cd AND ir.curr_lrd_row_flg = 1 

LEFT  JOIN 

    (SELECT 
            pdr.account_fa AS FA_ACCT,
            pdr.deptid,
            SUM(pdr.COST) AS FA_Amt

        FROM PSFS.PS_DEPR_RPT pdr 

    WHERE pdr.BUSINESS_UNIT = 'A0465'
    AND pdr.BOOK = 'PERFORM'
    AND pdr.FISCAL_YEAR = 2015
    AND pdr.ACCOUNTING_PERIOD = 8
    AND pdr.GROUP_ASSET_FLAG <> 'M'
    --AND ( ? is null or soh.REGION_CD = ?)

    GROUP BY FA_ACCT, deptid

UNION All

    SELECT
    pdr.account_ad AS FA_ACCT,
    pdr.deptid,
    SUM(pdr.depr_ltd) AS FA_Amt

    FROM PSFS.PS_DEPR_RPT pdr 

    WHERE pdr.BUSINESS_UNIT = 'A0465'
    AND pdr.BOOK = 'PERFORM'
    AND pdr.FISCAL_YEAR = 2015
    AND pdr.ACCOUNTING_PERIOD = 8
    AND pdr.GROUP_ASSET_FLAG <> 'M'
    --AND ( ? is null or soh.REGION_CD = ?)

    GROUP BY FA_ACCT, deptid) b

ON pgal.grp_br_ps_org_id = b.deptid
AND pgal.acct_nbr = b.fa_acct

WHERE pgal.fiscal_yr_mth_nbr = 201508
AND pgal.acct_nbr BETWEEN 130500 AND 160500   
AND ir.ody_group_cd = 'A0465'

ORDER BY 1, 2

对我来说,“1,2,3,4,5,6分组”这部分的可能重复似乎很奇怪。我希望这可能会产生重复的结果。另外,您的上一个联合集引入了另一个生成副本的机会。您是否隔离了预并集中的哪些集正在生成重复项,或者如果重复项仅出现在并集之后?我将2个主要查询之间的并集全部更改为并集,从而解决了我的问题。SQL正在从表1到表1运行一个查询,从表2到表1运行第二个查询。我这样做是因为每个表都可能有不在另一个表上的数据,尽管不太可能。我完全期待着复制品,我只需要把它们处理掉。谢谢你的回复。