gpt4 book ai didi

SQL Left Join加倍汇总列的值

转载 作者:行者123 更新时间:2023-12-04 17:40:20 26 4
gpt4 key购买 nike

我有 2 个表,我需要查询并根据 table1 中字段的总和是否等于 table2 中的字段总和(其他列匹配)返回“异常”结果集。

select A.TranName,A.TranDate,A.TranCode,SUM(A.TranQty) AS T1Qty,B.TranName,B.TranDate,B.TranCode,SUM(B.TranQty) AS T2Qty
from Table1 AS A
LEFT JOIN Table2 AS B
on A.TranName = B.TranName AND A.TranDate = B.TranDate AND A.TranCode = B.TranCode
GROUP BY A.TranName, A.TranDate, A.TranCode, B.TranName, B.TranDate, B.TranCode
HAVING SUM(A.TranQty) != SUM(B.TranQty)

结果集不正确,因为它将 Table1.TranQty 总和乘以从 Table2 返回的行数。

例如,如果表 1 有 1 条记录,其中连接匹配表 2 中的 2 条记录,则表 1 中 1 条记录的 TranQty 将乘以 2(因此匹配不正确)。

我确定我遗漏了一些关于在左连接中使用聚合函数(sum)的基本知识。

谢谢您的帮助!

(系统为MSSql)

最佳答案

试试这个查询..基本上,你应该分别聚合 A 和 B 的结果,然后验证计数。

select a.TranName,a.TranDate,a.TranCode
from (
select TranName,TranDate,TranCode, SUM(TranQty) AS T1Qty
Table1
group by TranName,TranDate,TranCode) a
LEFT JOIN
(
select TranName,TranDate,TranCode, SUM(TranQty) AS T1Qty
Table2
group by TranName,TranDate,TranCode) b
on (A.TranName = B.TranName AND A.TranDate = B.TranDate AND
A.TranCode = B.TranCode)
where a.T1Qty != b.T1Qty

确保这三列的组合足以在 A 和 B 中定义一行。如果还有其他行,您可能还需要添加它们。

关于SQL Left Join加倍汇总列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573424/

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