gpt4 book ai didi

sql-server-2008 - 如何通过在sql中连接两个表来删除select语句中的重复项

转载 作者:行者123 更新时间:2023-12-04 06:51:52 28 4
gpt4 key购买 nike

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

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 是在同一天发布的,但发票日期不同,所以当我做一份 Crystal 报告时.. SO 金额被汇总了,即使它只是重复了。我想要的(因为我无法在 Crystal Report 中找到对重复值求和的方法)是:

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

最佳答案

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

--- 编辑 ---

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

表一

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 月)的成本条目太多。如果您使用此表来计算总收入和成本,您最终会得到错误的值。

因此总结并解决您的问题:您应该使用两个单独的查询来计算聚合。

关于sql-server-2008 - 如何通过在sql中连接两个表来删除select语句中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40461119/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com