Sql 通过使用左联接的WorkID获取总计的不同总和

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 --------------------------------------------------------

我正在尝试获取总分钟数,但我的左连接无法正常工作。对于给定的机器描述,是否有方法添加一个总分钟数不同的列

以下是sqlfiddle:

我想有一列有明确的分钟总数。因此,对于WorkID 111,总分钟数应该是“30”而不是“40”

我的输出如下所示:

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