sql - 使用多个联接时如何调整左联接和子查询以修复不正确的 SUMS
问题描述
我无法在查询中获得正确的汇总结果。我试图按人,按日期按工作类型总结所有结果。当我完整地运行我的查询时,我的 SUM 结果是天文数字。
我使用的表和字段是:运算符 (OprExtID) 和 vwProductionDataForTouchReporting (Opr, Extract)。请注意,我暂时删除了允许“按工作类型”分组的表/字段和连接,因为这些连接导致我的总数很高。
在我重新添加这些连接之前,我想我需要使用子查询来总结我的结果,但是当我尝试它时遇到了错误。
我收到“'.' 附近的语法错误”。错误。关于我做错了什么的任何想法。
这是我当前的查询:
SELECT CONCAT(OP.OprExtID,'_CSIMAGS') AS Processor, Convert(VARCHAR(8), VT.StartDateTime, 112) AS [Processed Date], VT.Extract AS [Completed]
FROM dbo.Operators OP
INNER JOIN (SELECT OP.Operator, SUM(dbo.VT.Extract) as Completed
FROM VT GROUP BY VT.OPR) dbo.vwProductionDataForTouchReporting VT
ON OP.Operator = VT.Opr
GROUP BY VT.EXTRACT, CONCAT(OP.OprExtID,'_CSIMAGS'), Convert(VARCHAR(8), VT.StartDateTime, 112)
例如:使用以下结果,我希望查询能给我以下结果:
表运算符示例:OprExtID 0012385
示例表(视图) vwProductionDataForTouchReporting StartDateTime,Opr,Extract 2019-01-03,0012385,15 2019-01-03,0012385,87 2019-01-04,0012385,12 2019-01-04,0012385,7
查询结果:处理日期,处理器,完成时间 2019-01-03,0012385,102 2019-01-04,0012385,19
关于我在这里缺少的任何提示?
解决方案
我不确定您的加入方式是否正确(或者我可能误解了您在此处尝试执行的操作)。我会写这个有点不同:
FROM ((((dbo.Operators AS OP
INNER JOIN dbo.vwProductionDataForTouchReporting VT
ON OP.Operator = VT.Opr)
INNER JOIN dbo.DataInput DI
ON VT.JobID = DI.JobID)
INNER JOIN dbo.jobs JO
ON DI.JobID = JO.ID)
INNER JOIN dbo.Machines MA
ON DI.MachNo = MA.MachNo)
INNER JOIN dbo.JobTypes JT
ON DI.JobTypeID = JT.JobTypeID
这通常是我看到连接被编码的方式:
FROM dbo.Operators AS OP
INNER JOIN dbo.vwProductionDataForTouchReporting VT
ON (OP.Operator = VT.Opr)
INNER JOIN dbo.DataInput DI
ON (VT.JobID = DI.JobID)
INNER JOIN dbo.jobs JO
ON (DI.JobID = JO.ID)
INNER JOIN dbo.Machines MA
ON (DI.MachNo = MA.MachNo)
INNER JOIN dbo.JobTypes JT
ON (DI.JobTypeID = JT.JobTypeID)
此外,如果您实际上得到重复,那么您可以针对聚合表运行查询(有几种方法可以做到这一点,但您可以从字面上放置一个选择来代替表引用):
FROM dbo.Operators AS OP
INNER JOIN (SELECT top 1 Opr from dbo.vwProductionDataForTouchReporting) VT
ON (OP.Operator = VT.Opr)
INNER JOIN dbo.DataInput DI
ON (VT.JobID = DI.JobID)
INNER JOIN dbo.jobs JO
ON (DI.JobID = JO.ID)
INNER JOIN dbo.Machines MA
ON (DI.MachNo = MA.MachNo)
INNER JOIN dbo.JobTypes JT
ON (DI.JobTypeID = JT.JobTypeID)
推荐阅读
- c# - 如何创建 powershell cmdlet (C#) 输出参数
- php - Nginx 负载平衡与代理 php-fpm - try_files
- python - 循环从一个数据帧在 matplotlib 中创建多个图形?
- angular8 - Angular Gridster-2 可重新拖动和调整大小
- python - 如何使用叠加的正方形可视化相对区域(使用 Python)?
- django - 在 django 的 requirements.txt 中安装 psycopg2 时出现错误代码
- reactjs - 如何通过单击父组件中的 Material UI Icon 来控制子组件
- ios - 领域更新删除现有数据
- ruby-on-rails - 如何为哈希编写 rspec 测试
- excel - Excel - 从多列返回相邻值