具有聚合列的SQL连接
好的,我有这3个表(OrderRouting、TimeTicketSet、WorkCntr): 右边的第四个表是我需要输出的样子 我只需要前两个表中的列,但由于这两个表中的WorkCntr列不匹配,我必须引入WorkCntr表来将它们绑定起来。它是一个多条件联接,其中JobNo和WorkCntr需要为每个对应行匹配。我需要返回OrderRouting表中的每条记录,并且需要对TotEstHrs和ManHrs列进行求和 因此,对于第一排,我们可以看到切割作业编号20166-02,估计为2.25小时,总工时为1.15、.75和.25之和 以下是我到目前为止尝试过但没有成功的方法:具有聚合列的SQL连接,sql,sql-server,Sql,Sql Server,好的,我有这3个表(OrderRouting、TimeTicketSet、WorkCntr): 右边的第四个表是我需要输出的样子 我只需要前两个表中的列,但由于这两个表中的WorkCntr列不匹配,我必须引入WorkCntr表来将它们绑定起来。它是一个多条件联接,其中JobNo和WorkCntr需要为每个对应行匹配。我需要返回OrderRouting表中的每条记录,并且需要对TotEstHrs和ManHrs列进行求和 因此,对于第一排,我们可以看到切割作业编号20166-02,估计为2.25小
SELECT t.JobNo, w.ShortName, SUM(o.TotEstHrs) AS 'Estimated Hours',
SUM(t.ManHrs) AS 'Man Hours'
FROM TimeTicketDet t LEFT JOIN WorkCntr w ON t.WorkCntr = w.WorkCntr RIGHT
JOIN OrderRouting o ON t.JobNo = o.JobNo and w.ShortName = o.WorkCntr
WHERE t.JobNo LIKE '20040%'
AND w.ShortName IN ('Cutting', 'Framing', 'Assembly', 'Grinding',
'Painting', 'Glazing', 'Locknprep', 'Packaging')
GROUP BY t.JobNo, w.ShortName
ORDER BY t.JobNo, w.ShortName;
它返回正确的JobNo、ShortName、ManHrs amount,但OrderRouting中有行丢失,并且TotEstHrs值错误
我正在使用SQL Server Management Studio我在
OrderRouting
中使用一行分组重新编写查询,假设它的值在一个表中是唯一的,并使用合并
返回零工时,其中作业没有花费工时。下面是查询
SELECT
o.JobNo,
o.WorkCntr,
o.TotEstHrs,
COALESCE(SUM(t.ManHrs), 0) AS ManHrs
FROM OrderRouting o
JOIN WorkCntr w ON
o.WorkCntr = w.ShortName
LEFT JOIN TimeTicketDet t ON
o.JobNo = t.JobNo
AND w.WorkCntr = t.WorkCntr
WHERE
o.JobNo LIKE '20040%'
AND w.ShortName IN ('Cutting', 'Framing', 'Assembly', 'Grinding', 'Painting', 'Glazing', 'Locknprep', 'Packaging')
GROUP BY o.JobNo, o.WorkCntr, o.TotEstHrs
ORDER BY o.JobNo, o.WorkCntr;
我想知道,当您的示例数据没有这样的作业时,为什么会有像“20040%”这样的
o.JobNo
,但我想这只是一个错误,所以我将代码保持不变。为什么结果表中的TotalEstHrs
值与OrderRouting表中的值不同?(即用于框架和分级)哎呀,那只是一个打字错误,很快就把那些表格整理好了。我已经更正了它,以免让未来的读者感到困惑。非常感谢,代码工作起来很有魅力。我会仔细研究的。“20040%”正是我当时正在从事的工作,我没有注意到我的样本表中有一个不同的工作编号