I am trying to do the following
I have a QA table that contains the following:
TICKET_ID SKILL_ID SCORE USER
Skills table:
SKILL_ID SKILL_NAME AREA_ID 10 SKILL1 1 20 SKILL2 1 30 SKILL3 2 40 SKILL4 2 50 SKILL5 2 60 SKILL6 3 70 SKILL7 3
and TICKET tables made of:
TICKET_ID TICKET_NUMBER 1 AAA 2 BBB 3 CCC
QA has FK for TICKETS using TICKET_ID, as well as FK for SKILLS using SKILL_ID
What do I need to do:
for each ticket in the QA table, check that the total score in each area does not exceed 100, and if the value 0 is exceeded, then make an AVG of 3 results and groups by the ticket number, which is in another table. Therefore, for each case I will need to calculate the points for each area, if> 100, then 0 still leave the original value, then make an average of three values ββand a group by ticket number
Not sure if this is possible
Therefore, perhaps to calculate the area_1 score, I do the following:
SELECT DECODE(100 - SUM(SCORE), 100,100, 95,95, 90,90, 85,85, 80,80, 75,75, 70,70, 65,65, 60,60, 55,55, 50,50, 45,45, 40,40, 35,35, 30,30, 25,25, 20,20, 15,15, 10,10, 5,5, 0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 1) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
to calculate the area_2 batch, but changing the WHERE clause (WHERE AREA_ID = 2 this time):
SELECT DECODE(100 - SUM(SCORE), 100,100, 95,95, 90,90, 85,85, 80,80, 75,75, 70,70, 65,65, 60,60, 55,55, 50,50, 45,45, 40,40, 35,35, 30,30, 25,25, 20,20, 15,15, 10,10, 5,5, 0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 2) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
and compute the estimate of region_3, but by changing the WHERE clause (WHERE AREA_ID = 3):
SELECT DECODE(100 - SUM(SCORE), 100,100, 95,95, 90,90, 85,85, 80,80, 75,75, 70,70, 65,65, 60,60, 55,55, 50,50, 45,45, 40,40, 35,35, 30,30, 25,25, 20,20, 15,15, 10,10, 5,5, 0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 3) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
Each of these blocks gives 1 value as an output.
What I'm trying to achieve is to deduce AVG from 3 blocks using ticket_number
I tried to sum 3 blocks together, but this does not allow me:
SELECT DECODE(100 - SUM(SCORE), 100,100, 95,95, 90,90, 85,85, 80,80, 75,75, 70,70, 65,65, 60,60, 55,55, 50,50, 45,45, 40,40, 35,35, 30,30, 25,25, 20,20, 15,15, 10,10, 5,5, 0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 1) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1 + SELECT DECODE(100 - SUM(SCORE), 100,100, 95,95, 90,90, 85,85, 80,80, 75,75, 70,70, 65,65, 60,60, 55,55, 50,50, 45,45, 40,40, 35,35, 30,30, 25,25, 20,20, 15,15, 10,10, 5,5, 0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 2) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1 + SELECT DECODE(100 - SUM(SCORE), 100,100, 95,95, 90,90, 85,85, 80,80, 75,75, 70,70, 65,65, 60,60, 55,55, 50,50, 45,45, 40,40, 35,35, 30,30, 25,25, 20,20, 15,15, 10,10, 5,5, 0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 3) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
thanks