2017-09-15 3 views
1

Je voudrais résumer quelque chose comme ceci: Ma première table montre que les projets:Sélectionner et qté somme de deux tables (mysql)

id |progress [%] | 
    1 |100   | 
    2 |5    | 
    3 |5    | 
    4 |100   | 
    5 |10   | 

Deuxième tableau montre les tâches où project_id a le même identifiant numéros dans la première table (id = PROJECT_ID):

Project_id |status  | 
    1   |done  | 
    2   |done  | 
    3   |undone  | 
    4   |in_progress| 
    5   |done  | 

Je voudrais me joindre à ces deux tables et d'obtenir un résultat de ligne:

| done | undone | in_progress | 
| 2  | 1  | 0   | 

Je voudrais résumer toutes les tâches (deuxième table) avec leurs statuts mais sans les tâches qui sont dans les projets (première table) avec 100% de progrès.

+0

google sur 'pivot' –

Répondre

1

Utilisez SUM avec les instructions CASE.

SELECT SUM(CASE WHEN status = 'done' THEN 1 ELSE 0 END) done, 
SUM(CASE WHEN status = 'undone' THEN 1 ELSE 0 END) undone, 
SUM(CASE WHEN status = 'in_progress' THEN 1 ELSE 0 END) in_progress 
FROM yourtablea a 
INNER JOIN yourtableb b ON a.id = b.Project_id 
WHERE progress != '100' 

Sortie

done undone in_progress 
2 1  0 

SQL Fiddle: http://sqlfiddle.com/#!9/6b936/2/0

0
select SUM(if(a.status ="done", 1,0)) as `Done`, SUM(if(a.status ="undone", 1,0)) as `UnDone`, SUM(if(a.status ="in_progress", 1,0)) as `UnDone` from Status_table a join Progress_table b on a.Project_id = b.id WHERE b.progress != '100';