我无法让我的查询正确总结的结果。我试图通过人来总结所有的结果,按照日期类型的工作。当我的全部运行我的查询,我和结果是天文数字。
我使用的表和字段:运营商(OprExtID)和vwProductionDataForTouchReporting(OPR,提取物)。请注意,我删除了表/字段并加入了允许分组“按工种”暂时为这些连接都引起我的高数总和。
我加入之前我想我需要使用子查询来总结我的结果,但我遇到了一个错误,当我尝试它的加入回来。
我发现了一个“近‘’有语法错误。”错误。在我做错了任何想法。
这里是我当前的查询:
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,提取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
在什么我失踪这里有什么建议?
您遇到的问题不会有任何与你有多少表加入到。问题是,在一个或一个以上的表,还有更多的记录比你想象的有基于你指定的JOIN
标准。
我们没有你的表模式和样本数据,所以你不可能在这里得到一个明确的答案,但你可以得到这个自己的底部。
开始只有一个表,并得到行数:
SELECT
COUNT(*)
FROM dbo.Operators AS OP
--INNER JOIN
-- dbo.vwProductionDataForTouchReporting AS VT
-- ON
-- OP.Operator = VT.Opr
--INNER JOIN
-- dbo.DataInput AS DI
-- ON
-- VT.JobID = DI.JobID
--INNER JOIN
-- dbo.jobs AS JO
-- ON
-- DI.JobID = JO.ID
--INNER JOIN
-- dbo.Machines AS MA
-- ON
-- DI.MachNo = MA.MachNo
--INNER JOIN
-- dbo.JobTypes AS JT
-- ON
-- DI.JobTypeID = JT.JobTypeID
在同一时间取消注释了一个JOIN
直到数狂奔。看看发生了什么该表,并考虑,也许,只有加入到SUBQUERY
你需要的列周围SELECT...GROUP BY
。你真正需要做的,将取决于你发现了什么,但你知道更具体的你处理什么用。
我不能肯定你的加入是正确的,你写它(或者也许我误解你正在尝试做的)的方式。我会写不同的这一点:
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)