Mysql 如何对另一列中每个不同值的列值求和

Mysql 如何对另一列中每个不同值的列值求和,mysql,Mysql,我一直在根据人员和工作站的工作时间编写绩效评估报告。我设法从表中获取所需的所有信息,但我无法完成代码以使其显示为一行。这里是我使用的 首先,我使用这两个选择,这样我就只需要我需要的,因为这两个表都有超过20-25列和很多行 SELECT CONFIRMATION, CONFIRMPOS, POTYPE, PRDORDER, OPERATION,PERSONELNUM,PERSONELNAME FROM PERSONNEL INTO TMPPERSONEL; SEL

我一直在根据人员和工作站的工作时间编写绩效评估报告。我设法从表中获取所需的所有信息,但我无法完成代码以使其显示为一行。这里是我使用的

首先,我使用这两个选择,这样我就只需要我需要的,因为这两个表都有超过20-25列和很多行

SELECT CONFIRMATION, CONFIRMPOS, POTYPE, PRDORDER,
     OPERATION,PERSONELNUM,PERSONELNAME 
    FROM PERSONNEL 
    INTO TMPPERSONEL;

SELECT WORKCENTER, CONFIRMATION, CONFIRMPOS,SETUP,
     MACHINE, LABOUR, CONFIRMDATE 
    FROM CONF 
    INTO TMPCONF;
接下来,我使用这个select组合要处理的两个表

SELECT TMPPERSONNEL.POTYPE, TMPPERSONNEL.PRDORDER, TMPPERSONNEL.OPERATION, TMPCONF.WORKCENTER, TMPCONF.CONFIRMATION, TMPCONF.CONFIRMPOS, TMPPERSONNEL.PERSONELNUM, TMPPERSONNEL.PERSONELNAME, TMPCONF.SETUP, TMPCONF.MACHINE, TMPCONF.LABOUR, TMPCONF.CONFIRMDATE 
    FROM TMPPERSONNEL  LEFT JOIN TMPCONF ON  TMPCONF.CONFIRMATION = TMPPERSONNEL.CONFIRMATION 
        AND TMPCONF.CONFIRMPOS = TMPPERSONNEL.CONFIRMPOS 
    INTO TMPREPORT;
现在,我要做的是将每个人或工作站在特定日期(日期1、日期2)之间的工作时间(设置、机器、人工)相加,并将其显示为一行。例如,从这个表中

PERSONELNUM  PERSONELNAME  WORKCENTER   SETUP  MACHINE  LABOUR  CONFIRMDATE 
1             Personnel1   WORKCENTER1     5     20       20    01.01.2014
1             Personnel2   WORKCENTER1     5     20       20    01.01.2014
1             Personnel2   WORKCENTER3     5     20       20    02.01.2014
1             Personnel1   WORKCENTER2     5     20       20    02.01.2014
1             Personnel3   WORKCENTER1     5     20       20    02.01.2014
1             Personnel3   WORKCENTER2     5     20       20    03.01.2014
1             Personnel1   WORKCENTER1     5     20       20    03.01.2014
1             Personnel2   WORKCENTER3     5     20       20    04.01.2014
1             Personnel1   WORKCENTER2     5     20       20    04.01.2014
1             Personnel3   WORKCENTER1     5     20       20    04.01.2014

如果我的解释令人困惑,我很抱歉。由于我是一个初学者,我只能尽我所知来描述这个问题

编辑:如果我想看到这样的东西,我应该怎么做:

PERSONELNUM  PERSONELNAME  WORKCENTER    SETUP  MACHINE  LABOUR 
  1          Personnel1    WORKCENTER1     10     40       40  
  1          Personnel1    WORKCENTER2     10     40       40 
  1          Personnel2    WORKCENTER1      5     20       20      
  1          Personnel2    WORKCENTER3     10     40       40 
  1          Personnel3    WORKCENTER1     10     40       40 
  1          Personnel3    WORKCENTER2      5     20       20  

看来你的问题很像

我在下面列出了一个可能的解决方案

SELECT PERSONELNUM, PERSONELNAME, SUM(SETUP),SUM(MACHINE),SUM(LABOUR) AS PERSONELNAME_SUM FROM TABLE GROUP BY PERSONELNAME

这样的办法应该行得通

SELECT
 PERSONALNUM,
 PERSONALNAME,
 SUM(SETUP) AS SETUP,
 SUM(MACHINE) AS MACHINE,
 SUM(LABOUR) AS LABOUR
FROM
 TMPREPORT
WHERE
 CONFIRMDATE BETWEEN 'DATE1' AND 'DATE2'
GROUP BY
 PERSONELNUM;

请参见

您是否尝试将personelnum列分组并对其他列求和? 比如:

SELECT p.POTYPE, p.PRDORDER, p.OPERATION, c.WORKCENTER, c.CONFIRMATION, c.CONFIRMPOS, p.PERSONELNUM, p.PERSONELNAME, sum(c.SETUP), sum(c.MACHINE), sum(c.LABOUR), c.CONFIRMDATE 
FROM TMPPERSONNEL as p LEFT JOIN TMPCONF as c ON c.CONFIRMATION = p.CONFIRMATION 
    AND c.CONFIRMPOS = p.CONFIRMPOS 
group by
    p.PERSONELNUM
 INTO TMPREPORT;
若要按列添加多个group by column,必须添加每个group by column,并用逗号分隔

SELECT p.POTYPE, p.PRDORDER, p.OPERATION, c.WORKCENTER, c.CONFIRMATION, c.CONFIRMPOS, p.PERSONELNUM, p.PERSONELNAME, sum(c.SETUP), sum(c.MACHINE), sum(c.LABOUR), c.CONFIRMDATE 
FROM TMPPERSONNEL as p LEFT JOIN TMPCONF as c ON c.CONFIRMATION = p.CONFIRMATION 
    AND c.CONFIRMPOS = p.CONFIRMPOS 
group by
    p.PERSONELNUM, c.WORKCENTER
 INTO TMPREPORT;

所有那些帽子都很吓人!对不起,帽子的事。我从mySQL行复制粘贴:)它们也很危险!
SELECT p.POTYPE, p.PRDORDER, p.OPERATION, c.WORKCENTER, c.CONFIRMATION, c.CONFIRMPOS, p.PERSONELNUM, p.PERSONELNAME, sum(c.SETUP), sum(c.MACHINE), sum(c.LABOUR), c.CONFIRMDATE 
FROM TMPPERSONNEL as p LEFT JOIN TMPCONF as c ON c.CONFIRMATION = p.CONFIRMATION 
    AND c.CONFIRMPOS = p.CONFIRMPOS 
group by
    p.PERSONELNUM, c.WORKCENTER
 INTO TMPREPORT;