Sql 通过使用左联接的WorkID获取总计的不同总和
我正在尝试获取总分钟数,但我的左连接无法正常工作。对于给定的机器描述,是否有方法添加一个总分钟数不同的列 以下是sqlfiddle: 我想有一列有明确的分钟总数。因此,对于WorkID 111,总分钟数应该是“30”而不是“40” 我的输出如下所示:Sql 通过使用左联接的WorkID获取总计的不同总和,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我正在尝试获取总分钟数,但我的左连接无法正常工作。对于给定的机器描述,是否有方法添加一个总分钟数不同的列 以下是sqlfiddle: 我想有一列有明确的分钟总数。因此,对于WorkID 111,总分钟数应该是“30”而不是“40” 我的输出如下所示: WorkID | Description | MachineDescription | Name | RegMin | Minutes --------------------------------------------------------
WorkID | Description | MachineDescription | Name | RegMin | Minutes
-------------------------------------------------------------------
111 Replace Belt Splitter Joe 10 10
111 Replace Belt Splitter Bob 20 10
112 Door Broke Splitter Joe 10 20
我想要一个列,按不同的工作方式显示总分钟数,如下所示
WorkID | Description | MachineDescription | Name | RegMin | Minutes | Total Minutes
-----------------------------------------------------------------------------------
111 Replace Belt Splitter Joe 10 10 30
111 Replace Belt Splitter Bob 20 10 30
112 Door Broke Splitter Joe 10 20 30
这可能吗
SELECT Work.WorkID
, Work.Description
, Machine.MachineDescription
, Name.NAME
, Work2.RegMin
, Work.MINUTES
, (SELECT (SUM(work2.RegMin) ) FROM work2 left join work on work2.workid = work.workid) - work.minutes AS TotalMinutes
FROM Work Work
JOIN Machine Machine ON Machine.MachineID = Work.MachineID
LEFT JOIN Work2 Work2 ON Work2.WorkID = Work.WorkID
LEFT JOIN Name Name ON Name.NameID = Work2.NameID
GROUP BY work.workID
, Work.Description
, Machine.MachineDescription
, Name.NAME
, Work2.RegMin
, Work.MINUTES
返回
WORKID DESCRIPTION MACHINEDESCRIPTION NAME REGMIN MINUTES TOTALMINUTES
111 Sink Broken SPLITTER Bob 20 10 30
111 Sink Broken SPLITTER Joe 10 10 30
112 Door Broken SPLITTER Joe 10 20 20
将此项添加到您的选择:
(SELECT SUM(minutes)
FROM (SELECT DISTINCT workid, minutes FROM WORK) W
) AS Total_Minutes
使用
相关子查询
获取结果。试试这个
SELECT Work.WorkID,
Work.Description,
Machine.MachineDescription,
NAME.NAME,
Work2.RegMin,
Work.MINUTES,
(SELECT Sum(DISTINCT MINUTES)
FROM Work w
WHERE w.MachineID = Machine.MachineID) Total_minutes
FROM Work Work
JOIN Machine Machine
ON Machine.MachineID = Work.MachineID
LEFT JOIN Work2 Work2
ON Work2.WorkID = Work.WorkID
LEFT JOIN NAME NAME
ON NAME.NameID = Work2.NameID
输出:
WorkID Description MachineDescription NAME RegMin MINUTES Total_minutes
------ ----------- ------------------ ---- ------ ------- -------------
111 Sink Broken SPLITTER Joe 10 10 30
111 Sink Broken SPLITTER Bob 20 10 30
112 Door Broken SPLITTER Joe 10 20 30
SUM(DISTINCT)
当我在查询中看到数据/逻辑问题时,总是指出它。你能更好地解释一下你是如何得出三排的“30”的吗?你也可以解释“40”的评论。我可以看到值是30、20、50或10,但不是40。我还没有得到“30”,但不知道是否有办法得到该结果。请看下面我的最新编辑,这是您的后续操作吗?谢谢您的帮助。我要的是会议记录而不是记录。我想按不同的机器说明合计。所以(总分钟数:10+20)不是(10+10+20)。如果不可能让我知道。。。试图找到一个简单的方法来实现这一点。那么,根据您提供的示例数据,总分钟数应该是30、20、30?好吧,我想要机器描述的总分钟数,但需要一个不同的工作ID。这有意义吗?所以我希望TotalMinutes是30,30,30。我认为你的数学是错误的,根据机器描述,使用不同的workid,它将是20,20,20。我得到这个错误:子查询返回的值超过1。
WorkID Description MachineDescription NAME RegMin MINUTES Total_minutes
------ ----------- ------------------ ---- ------ ------- -------------
111 Sink Broken SPLITTER Joe 10 10 30
111 Sink Broken SPLITTER Bob 20 10 30
112 Door Broken SPLITTER Joe 10 20 30