【问题标题】:How to apply group by clause如何应用 group by 子句
【发布时间】:2013-02-19 12:38:31
【问题描述】:

查询

SELECT 
    TIMECARD.EMP_ID, TIMECARD.TIMECARD_ID, TIMECARD.TIMECARD_STATUS,
    TASK.MAN_HOURS
FROM 
    TRN_TIMECARD_ACTIVITY ACT
INNER JOIN 
    TRN_TIMECARD TIMECARD ON TIMECARD.TIMECARD_ID = ACT.TIMECARD_ID
INNER JOIN 
    TRN_TIMECARD_TASK TASK ON TASK.TIMECARD_ID = TIMECARD.TIMECARD_ID 
WHERE 
    ACT.TIMECARD_STATUS IN ('AP','RE')

输出:

61  42  AP  9
61  42  AP  9
61  43  AP  9
61  43  AP  9
61  47  AP  7

我必须按emp_id 分组并计算sum(man_hours)

如何获得如下价值

61  42  AP  52

【问题讨论】:

  • 你是怎么得到52的?
  • 分组后为什么要拿42?

标签: asp.net sql-server sql-server-2008


【解决方案1】:

...看不到中间两列在您的组中如何排列,所以我会这样做:

SELECT        TIMECARD.EMP_ID, SUM(TASK.MAN_HOURS)
FROM          TRN_TIMECARD_ACTIVITY ACT
INNER JOIN    TRN_TIMECARD TIMECARD ON TIMECARD.TIMECARD_ID=ACT.TIMECARD_ID
INNER JOIN    TRN_TIMECARD_TASK TASK ON TASK.TIMECARD_ID=TIMECARD.TIMECARD_ID 
WHERE         ACT.TIMECARD_STATUS IN('AP','RE')
GROUP BY      TIMECARD.EMP_ID

【讨论】:

    【解决方案2】:

    根据您想要的结果,我看到您给出了TIMECARD.TIMECARD_ID 列的Minimum最低)值和Sum总计)的TASK.MAN_HOURS。 (但我不明白为什么你的值是 52

    SELECT  TIMECARD.EMP_ID,
            MIN(TIMECARD.TIMECARD_ID) time_card,
            TIMECARD.TIMECARD_STATUS,
            SUM(TASK.MAN_HOURS) totalHours
    FROM    TRN_TIMECARD_ACTIVITY ACT
            INNER JOIN TRN_TIMECARD TIMECARD ON TIMECARD.TIMECARD_ID=ACT.TIMECARD_ID
            INNER JOIN TRN_TIMECARD_TASK TASK ON TASK.TIMECARD_ID=TIMECARD.TIMECARD_ID 
    WHERE   ACT.TIMECARD_STATUS IN('AP','RE')
    GROUP   BY TIMECARD.EMP_ID, TIMECARD.TIMECARD_STATUS
    

    【讨论】:

      【解决方案3】:

      我认为这会对您有所帮助...占用最少的 TIMECARD.TIMECARD_ID

      SELECT TIMECARD.EMP_ID,
             MIN(TIMECARD.TIMECARD_ID) TIMECARD_ID, 
             TIMECARD.TIMECARD_STATUS,
             SUM(TASK.MAN_HOURS) HOURS 
      FROM TRN_TIMECARD_ACTIVITY ACT
      INNER JOIN
      TRN_TIMECARD TIMECARD ON TIMECARD.TIMECARD_ID=ACT.TIMECARD_ID
      INNER JOIN
      TRN_TIMECARD_TASK TASK ON TASK.TIMECARD_ID=TIMECARD.TIMECARD_ID 
      WHERE ACT.TIMECARD_STATUS IN('AP','RE')
      GROUP BY TIMECARD.EMP_ID,TIMECARD.TIMECARD_STATUS
      

      【讨论】:

        猜你喜欢
        • 2011-09-25
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        相关资源
        最近更新 更多