【问题标题】:SQL Server Join two tables, incorrect sum in the resultSQL Server 连接两个表,结果中的总和不正确
【发布时间】:2019-07-17 12:24:41
【问题描述】:

我在连接两个表时得到不正确的结果。 Runlog.casecount 乘以第二个表(Vppallets)上包含相同palletid 编号的记录数,但它上面有重复的palletid(故意),但我得到的结果不是正确的。现在我在查询中使用了 where 子句,但我也得到了同样不正确的结果。

预期结果

RunID   Cases    vpLot
----------------------
1872    104.00   136
1872    104.00   137

当前代码的当前结果:

RunID   Cases    vpLot
-----------------------
1872    312.00   136
1872    312.00   137

当前查询

SELECT   
    Vppallets.RunID, 
    SUM(RunLog.casecount) AS Cases,
    Vppallets.vplot
FROM
    Vppallets, RunLog
WHERE
    Vppallets.vpPalletID = RunLog.PalletID
    AND Vppallets.RunID = 1872
GROUP BY 
    Vppallets.RunID, Vppallets.vplot

下面的示例数据:

Vppallets

vpPalletID  PalletNumber    RunID   casecount   vplot
-----------------------------------------------------
5000120     4001810         1872    34.66       136
5000120     3001802         1872    34.66       136
5000120     3001856         1872    34.66       136
5000123     4001808         1872    34.66       137
5000123     3001801         1872    34.66       137
5000123     4001833         1872    34.66       137

运行日志

RunID   PalletID    casecount
-----------------------------
1872    5000120     104.00
1872    5000123     104.00

我知道重复来自哪里,我也尝试过加入,也重复我得到完全相同的结果,如果我删除条件,那么结果,它甚至更糟糕。

【问题讨论】:

  • Vppallets 是一个视图吗?
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 多年前),不鼓励使用它

标签: sql sql-server


【解决方案1】:
;WITH CTE AS
(
    SELECT DISTINCT RunID, vpPalletID, vplot
    FROM Vppallets
    WHERE RunID = 1872
)
SELECT CTE.RunID, SUM(RL.casecount) AS Cases, CTE.vplot
FROM CTE INNER JOIN RunLog RL ON CTE.vpPalletID = RL.PalletID
GROUP BY CTE.RunID, CTE.vplot

【讨论】:

  • @Juan G,是的,我忘了那个。使用一些表变量编辑了我的查询。
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多