好的,我有这3个表(OrderRouting,TimeTicketDet,WorkCntr):
右边的第4个表是我需要输出的样子。
我只需要前两个表中的列,但由于这两个表中的WorkCntr列不匹配,我必须引入WorkCntr表来绑定它们。它是一个多条件连接,其中JobNo和WorkCntr需要匹配每个相应的行。我需要返回OrderRouting表中的每条记录,并且需要将TotEstHrs和ManHrs列相加
所以对于第一行,我们可以看到JobNo 20166-02 for Cutting,估计是2.25小时,总ManHrs是1.15,.75和.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数量,但OrderRouting中有行丢失且TotEstHrs值错误
我正在使用SQL Server Management Studio
答案 0 :(得分:1)
我在OrderRouting
的行上使用分组重写了下面的查询,假设它的值在表中是唯一的,并使用COALESCE
返回零工时,其中作业没有花费时间。以下是查询
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;
我想知道为什么当你的样本数据没有这样的工作时你有o.JobNo LIKE '20040%'
,但我想这只是一个错误,所以我保持代码不变。