【问题标题】:Using 2 worksheets to calculate in sql使用 2 个工作表在 sql 中计算
【发布时间】:2014-01-27 17:01:41
【问题描述】:

我需要处理可追溯到 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')

如何引用不同工作表中的列以用作我的模式,而不是除以实际数字?因为不同月份有不同的模式,使用一个实际的数字会在其他月份给出错误的输出。

【问题讨论】:

  • 请提供一些原始表格数据。你的架构是什么?
  • Period Employee EmOrg EmType Total Hours Mode 201306 GOVNP1 RSA/PZB/T00 S 180 66 201306 LANDCJ1 RSA/PZB/T00 S 200 35 201306 WOODRE RSA/PZB/T00 S 180 34 201306 MO /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/T0130 S 19EROP10 28 /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/T0130 S MNDA 2 /T00 S 188 21 我在第一个电子表格中使用的数据示例
  • 不适用于您的问题。

标签: mysql sql sum mode


【解决方案1】:

您需要每月为您的 Mode 创建一个单独的表,然后使用 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多