Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有聚合列的SQL连接_Sql_Sql Server - Fatal编程技术网

具有聚合列的SQL连接

具有聚合列的SQL连接,sql,sql-server,Sql,Sql Server,好的,我有这3个表(OrderRouting、TimeTicketSet、WorkCntr): 右边的第四个表是我需要输出的样子 我只需要前两个表中的列,但由于这两个表中的WorkCntr列不匹配,我必须引入WorkCntr表来将它们绑定起来。它是一个多条件联接,其中JobNo和WorkCntr需要为每个对应行匹配。我需要返回OrderRouting表中的每条记录,并且需要对TotEstHrs和ManHrs列进行求和 因此,对于第一排,我们可以看到切割作业编号20166-02,估计为2.25小

好的,我有这3个表(OrderRouting、TimeTicketSet、WorkCntr):

右边的第四个表是我需要输出的样子

我只需要前两个表中的列,但由于这两个表中的WorkCntr列不匹配,我必须引入WorkCntr表来将它们绑定起来。它是一个多条件联接,其中JobNo和WorkCntr需要为每个对应行匹配。我需要返回OrderRouting表中的每条记录,并且需要对TotEstHrs和ManHrs列进行求和

因此,对于第一排,我们可以看到切割作业编号20166-02,估计为2.25小时,总工时为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 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%”正是我当时正在从事的工作,我没有注意到我的样本表中有一个不同的工作编号