I have been working on a report for performance evaluation based on working time of personnel and the workstation. I manage to get all the information from the tables i need but i cant finalize the code to make it show as a single line. Here is what i use;
First i use these 2 selects so that i only have what i need as both of these tables have over 20-25 columns and a lot of rows;
SELECT CONFIRMATION, CONFIRMPOS, POTYPE, PRDORDER,
OPERATION,PERSONELNUM,PERSONELNAME
FROM PERSONNEL
INTO TMPPERSONEL;
SELECT WORKCENTER, CONFIRMATION, CONFIRMPOS,SETUP,
MACHINE, LABOUR, CONFIRMDATE
FROM CONF
INTO TMPCONF;
Next i use this select to combine the two tables to work on;
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;
Now what i want to do is sum the time worked(SETUP,MACHINE,LABOUR) for each person or workstation between specific dates( DATE1,DATE2 ) and show it as a single line. For example from this table
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
to
PERSONELNUM PERSONELNAME SETUP MACHINE LABOUR
1 Personnel1 20 80 80
2 Personnel2 15 60 60
3 Personnel3 15 60 60
I am sorry if my explanation is confusing. As i am a beginner i can only describe the problem to the best of my small knowledge.
Edit: And what should i do if i want to see something like this:
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
It seems that your question is very similar to this one ?
I've listed a possible solution below
SELECT PERSONELNUM, PERSONELNAME, SUM(SETUP),SUM(MACHINE),SUM(LABOUR) AS PERSONELNAME_SUM FROM TABLE GROUP BY PERSONELNAME
Something like this should work.
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;
See http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html
did you tried grouping the personelnum column and summing the other columns? something like:
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;
in order to add more than one group by column you must add each of them seperating by a comma
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;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.