Sql 查询帮助:汇总某些组的视图

Sql 查询帮助:汇总某些组的视图,sql,oracle,maximo,Sql,Oracle,Maximo,我正在寻找一种正确的方法来构造视图的查询,以便在DB端包含一些合计等内容(该视图将由报表系统使用) 相关数据结构 目标 我想退回以下文件: 工作订单中的各种项目 所有人工成本的总和(每个人工小时的总和*费率) 所有项目的总和(每个项目的总和数量*单位成本) 文本CLOB 我已经到了可以在查询中显示相关信息的地步,但是我正在努力计算人工和项目成本的总和 迄今为止的查询 谢谢你能给我的帮助 将表连接在一起时,每个可能的组合将得到一行。所以,若一个工单有3个人工行和4个项目行,则三个表的联接将返回

我正在寻找一种正确的方法来构造视图的查询,以便在DB端包含一些合计等内容(该视图将由报表系统使用)

相关数据结构 目标 我想退回以下文件:

  • 工作订单中的各种项目
  • 所有人工成本的总和(每个人工小时的总和*费率)
  • 所有项目的总和(每个项目的总和数量*单位成本)
  • 文本CLOB
我已经到了可以在查询中显示相关信息的地步,但是我正在努力计算人工和项目成本的总和

迄今为止的查询
谢谢你能给我的帮助

将表连接在一起时,每个可能的组合将得到一行。所以,若一个工单有3个人工行和4个项目行,则三个表的联接将返回12行

避免这种情况的一种方法是在子查询中按工作顺序分组:

SELECT  WORKORDER.WONUM
,       LONGDESCRIPTION.LDTEXT
,       ... other columns ...
,       Labor.LaborCost
,       Item.ItemCost
FROM    MAXIMO.WORKORDER
LEFT JOIN 
        MAXIMO.LONGDESCRIPTION
ON      WORKORDER.WONUM = CAST(LONGDESCRIPTION.LDKEY as varchar(22))
LEFT JOIN
        (
        SELECT  WONUM
        ,       SUM(WPLABOR.LABORHRS * WPLABOR.RATE) as LaborCost
        FROM    MAXIMO.WPLABOR
        GROUP BY
                WOWNUM
        ) Labor        
ON      WORKORDER.WONUM = Labor.WONUM
LEFT JOIN
        (
        SELECT  WONUM
        ,       SUM(WPITEM.ITEMQTY * WPITEM.UNITCOST) as ItemCost
        FROM    MAXIMO.WPITEM
        GROUP BY
                WOWNUM
        ) Item
ON      WORKORDER.WONUM = Item.WONUM


你能稍微澄清一下设计吗。WPLabor是否包含一个或多个需要“汇总”的记录,并且项目相同。感谢您提供的出色且全面的答案!提醒一下:我不确定这是否合乎道德,但我编辑了您的SQL,通过在上找到的答案解决了我遇到的一个问题。这是一个很好的答案,而且是一个快速的细节,所以我想我应该自己修改一下。再次感谢!
 SELECT 
    WORKORDER.WONUM, 
    WORKORDER.ACTLABHRS, 
    WORKORDER.LOCATION, 
    WORKORDER.STATUS, 
    WORKORDER.WO7,          -- Requester
    WORKORDER.WO8,          -- Extension
    WORKORDER.WO9,          -- Location
    WORKORDER.LEADCRAFT, 
    WORKORDER.WO11,         -- Extension
    WORKORDER.GLACCOUNT, 
    WORKORDER.WO10,         -- Contact
    WORKORDER.DESCRIPTION,  -- Short description
    WORKORDER.WO6,          -- Plant rearrangement (YORN / boolean value)
    LONGDESCRIPTION.LDTEXT,
    WPLABOR.LABORHRS,
    WPLABOR.RATE,
    WPITEM.ITEMQTY,
    WPITEM.UNITCOST
  FROM   
    MAXIMO.WORKORDER
  LEFT OUTER JOIN 
    MAXIMO.LONGDESCRIPTION
      ON WORKORDER.WONUM = CAST(LONGDESCRIPTION.LDKEY as varchar(22))

  LEFT OUTER JOIN
    MAXIMO.WPLABOR
      ON WORKORDER.WONUM = WPLABOR.WONUM

  LEFT OUTER JOIN
    MAXIMO.WPITEM
      ON WORKORDER.WONUM = WPITEM.WONUM

  WHERE  
    LONGDESCRIPTION.LDOWNERTABLE='WORKORDER' AND
    LONGDESCRIPTION.LDOWNERCOL = 'DESCRIPTION';
SELECT  WORKORDER.WONUM
,       LONGDESCRIPTION.LDTEXT
,       ... other columns ...
,       Labor.LaborCost
,       Item.ItemCost
FROM    MAXIMO.WORKORDER
LEFT JOIN 
        MAXIMO.LONGDESCRIPTION
ON      WORKORDER.WONUM = CAST(LONGDESCRIPTION.LDKEY as varchar(22))
LEFT JOIN
        (
        SELECT  WONUM
        ,       SUM(WPLABOR.LABORHRS * WPLABOR.RATE) as LaborCost
        FROM    MAXIMO.WPLABOR
        GROUP BY
                WOWNUM
        ) Labor        
ON      WORKORDER.WONUM = Labor.WONUM
LEFT JOIN
        (
        SELECT  WONUM
        ,       SUM(WPITEM.ITEMQTY * WPITEM.UNITCOST) as ItemCost
        FROM    MAXIMO.WPITEM
        GROUP BY
                WOWNUM
        ) Item
ON      WORKORDER.WONUM = Item.WONUM