【问题标题】:how to remove duplicate in select statement with joining of two tables in sql如何通过在sql中连接两个表来删除select语句中的重复项
【发布时间】:2016-11-08 19:40:08
【问题描述】:

美好的一天,我正在处理这个查询,我想从两个不同的行中删除重复数据,所以例如我从这里得到这个记录查询结果:

SELECT DISTINCT 
T9.SlpName, T1.CardName [Customer Name],T1.DocNum [SO No.], 
T1.DocDate [SO Date],T1.DocTotal [SO Total], T3.DocNum [Delivery Doc Num], 
T5.DocNum [TRA No], T5.DocDate [TRA Date],T5.DocTotal [TRA Total],
T5.GrosProfit [Gross Profit]
FROM RDR1 T0  INNER JOIN ORDR T1 ON T0.DocEntry = T1.DocEntry  
    left outer join DLN1 T2 on T2.BaseEntry = T0.DocEntry  
    left outer join ODLN T3 on T2.DocEntry = T3.DocEntry  
    left Outer join INV1 T4 on T4.BaseEntry = T3.DocEntry and T4.BaseLine = T2.Linenum  and T4.BaseType = 15  
                   OR (T4.Basetype=17 and T4.BaseEntry=T0.DocEntry and T4.BaseLine=T0.LineNum)  
            left outer join OINV T5 on T5.DocEntry = T4.DocEntry  
            left outer join OSLP T9 on T9.SlpCode = T1.SlpCode  
            WHERE T1.DocDate BETWEEN '10.01.16' AND '10.27.16' AND T1.CardCode='C-ACQUA TECH'
Group by T9.SlpName, T1.[CardName], T1.[DocNum], T1.[DocDate], T1.DocTotal,
T3.DocNum, T5.DocNum,  T5.DocDate, T5.DocTotal,T5.GrosProfit
ORDER BY  T9.SlpName,T1.CardName


Customer | SO-Date | SO-Number | SO-Amount | INV-Date | INV-Amount 
B1        10-07-16   000001      80,000.50   11-26      54,000.00
B1        10-07-16   000001      80,000.50   11-29      24,000.00

SO 是在同一日期发布的,但发票日期不同,所以当我做水晶报告时.. SO 金额已被汇总,即使它只是重复。我想要的是(因为我无法在水晶报表中找到对重复值求和的方法)是:

Customer | SO-Date | SO-Number | SO-Amount | INV-Date | INV-Amount 
B1        10-07-16   000001      80,000.50   11-26-16   54,000.00
null         null     null       null        11-29-16   24,000.00

【问题讨论】:

    标签: sql-server-2008 sap crystal-reports-2008


    【解决方案1】:

    如果一行在您的联接的另一侧有多个联接伙伴,您将始终复制该行。您将需要两个单独的查询来聚合 SO-AmountINV-Amount

    --- 编辑 ---

    考虑这个简单的例子:我们有三个表。一个保存公司部门,一个存储部门的年收入,一个存储这些部门的每月成本。

    表 1

    DepartmentId | DepartmentName          | NumberEmployees
    5234         | "Software Development"  | 20
    3465         | "Sales"                 | 120
    

    表 2

    DepartmentId | Year | Revenue
    5234         | 2015 | 2,000,000
    5234         | 2014 | 1,500,000
    

    表 3

    DepartmentId | Year | Month | Cost
    5234         | 2015 | Jan   | 120,000
    5234         | 2015 | Feb   | 150,000
    5234         | 2014 | Jan   | 80,000
    

    现在的任务是总结部门5234的总收入以及总成本。

    如果我们连接表 1 和表 2,我们会得到:

    DepartmentId | DepartmentName          | NumberEmployees| Year | Revenue
    5234         | "Software Development"  | 20             | 2015 | 2,000,000
    5234         | "Software Development"  | 20             | 2014 | 1,500,000
    

    通过这张表,我们可以计算总收入。

    如果我们连接表 1 和表 3,我们会得到:

    DepartmentId | DepartmentName          | NumberEmployees | Year | Month | Cost
    5234         | "Software Development"  | 20              | 2015 | Jan   | 120,000
    5234         | "Software Development"  | 20              | 2015 | Feb   | 150,000
    5234         | "Software Development"  | 20              | 2014 | Jan   | 80,000
    

    您可以使用此表计算总成本。

    你不想做的是加入所有 3 个表,因为这样你会得到:

    DepartmentId | DepartmentName          | NumberEmployees| Year | Revenue   | Month | Cost
    5234         | "Software Development"  | 20             | 2015 | 2,000,000 | Jan   | 120,000
    5234         | "Software Development"  | 20             | 2015 | 2,000,000 | Feb   | 150,000
    5234         | "Software Development"  | 20             | 2014 | 1,500,000 | Jan   | 80,000
    

    您可以看到 2015 年的收入重复了,因为 2015 年(1 月和 2 月)的成本条目过多。如果您使用此表来计算总收入和成本,您最终会得到错误的值。

    所以总结一下你的问题:你应该使用两个单独的查询来计算你的聚合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多