如何申请分组条款

时间:2013-02-19 12:38:32

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

查询

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

根据您所需的结果,我看到您提供了列MinimumTIMECARD.TIMECARD_ID)的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

答案 2 :(得分:0)

我认为这会对您有所帮助......至少需要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