使用2个工作表在sql中计算

时间:2014-01-09 08:38:27

标签: mysql sql sum mode

我的数据可以追溯到2004年,因此必须简化从使用Excel到使用SQL以节省处理时间的计算。压力在我们的服务器上

我的数据是:

Period  Employee    EmOrg       EmType  Total Hours     Mode 
201306  GOVINP1     RSA/PZB/T00 S       180             66 
201306  LANDCJ1     RSA/PZB/T00 S       200             35 
201306  WOODRE      RSA/PZB/T00 S       180             34 
201306  MOKOHM1     RSA/JNB/T00 S       160             33 
201306  KAPPPJ      RSA/PLZ/T00 S       160             32 
201306  CAHISJ      RSA/PZB/T00 S       187             31 
201306  ZEMUN       RSA/PZB/T00 S       180             31 
201306  SAULDD1     RSA/PZB/T00 S       190             28 
201306  JEROP1      RSA/DUR/T00 S       188             26 
201306  NGOBS1      RSA/PZB/T00 S       204             24 
201306  ZONDNS2     RSA/PZB/T00 S       192             23 
201306  DLAMMP      RSA/PZB/T00 S       201             23 
201306  MPHURK      RSA/PLZ/T00 S       160             22 
201306  MNDAMB      RSA/PZB/T00 S       188             21

我期望的结果是:

Period  EmOrg       EmType  TotalHours  FTE S
201308  RSA/BFN/T00 S       198         1
201308  RSA/CPT/T00 S       744         3.757575
201308  RSA/DUR/T00 S       805         4.065656
201308  RSA/JNB/T00 S       396         2
201308  RSA/PLZ/T00 S       563         2.843434
201308  RSA/PTA/T00 S       594         3
201308  RSA/PZB/T00 S       4882        24.656565

我的疑问:

SELECT 
    LD.Period,
    LD.EmOrg,
    LD.EmType,
    Sum(LD.RegHrs) AS 'Total Hours',
    Sum(LD.RegHrs) / 198 As 'FTE_S'
FROM
    SSI.dbo.LD LD
GROUP BY LD.Period , LD.EmOrg , LD.EmType
HAVING (LD.EmOrg Like '%T00')
    AND (LD.EmType = 'S')

如何引用不同工作表中的列作为我的模式而不是用实际数字划分?因为不同月份的模式不同,使用实际数字会在其他月份产生错误的输出。

1 个答案:

答案 0 :(得分:0)

您需要为每月的模式创建一个单独的表,然后使用JOIN获取该值并使用它。

这样的事情:

SELECT 
    LD.Period,
    LD.EmOrg,
    LD.EmType,
    Sum(LD.RegHrs) AS 'Total Hours',
    Sum(LD.RegHrs) / M.Mode As 'FTE_S'
FROM
    SSI.dbo.LD LD
INNER JOIN SSI.dbo.Mode M
    ON LD.Period = M.Period -- Not sure its should be Period or Month
GROUP BY LD.Period , LD.EmOrg , LD.EmType
HAVING (LD.EmOrg Like '%T00')
    AND (LD.EmType = 'S')