2017-10-10 10 views
0

ces deux requêtes:SQLite - Fusionner deux tables avec je Comptons et somme en un seul résultat de

SELECT 
    b.ref, 
    ts.id_baits, 
    SUM(strftime('%s',ts.endtime) -strftime('%s',ts.initime)) AS t,COUNT(*) AS n 
FROM TimeSegments AS ts 
INNER JOIN Baits AS b ON b.id = ts.Id_Baits 
GROUP BY ts.id_baits 
ORDER BY b.ref 


SELECT b.ref, 
    COUNT(CASE WHEN e.Status=1 THEN 1 END) AS Undefined, 
    COUNT(CASE WHEN e.Status=1 THEN 1 END) AS GetClose, 
    COUNT(CASE WHEN e.Status=2 THEN 1 END) AS Threat, 
    COUNT(CASE WHEN e.Status=3 THEN 1 END) AS Attack, 
    COUNT(CASE WHEN e.Status=4 THEN 1 END) AS Hooked, 
    COUNT(CASE WHEN e.Status=5 THEN 1 END) AS Captured, 
    COUNT(CASE WHEN e.Status=6 THEN 1 END) AS Tagged, 
    COUNT (*) AS TOTAL 
FROM CastingsEvents AS e 
LEFT JOIN Trajectories AS tr ON tr.id = e.id_trajectories 
LEFT JOIN TimeSegments AS ts ON ts.id = tr.id_timesegments 
LEFT JOIN Baits AS b ON b.id = ts.Id_Baits 
GROUP BY ts.id_baits 
ORDER BY b.ref 

Comme on le voit, les deux tableaux sont regroupés par id_baits.

Et je veux fusionner les résultats dans un tableau, quelqu'un sait comment le faire?

+0

Je pense que cela pourrait aider [UNION article] (https://www.tutorialspoint.com/sqlite/sqlite_unions_clause.htm) – Jerrol

+0

Que voulez-vous dire par "fusionner"? S'il vous plaît fournir quelques exemples de données et votre sortie souhaitée. (Voir [Comment mettre en forme des tables SQL dans un post de débordement de pile ?] (Https://meta.stackexchange.com/q/96125) pour savoir comment en ajouter.) –

+0

Bonjour Jerrol, la clause UNION nécessite que les deux tables aient les mêmes colonnes (correct?), ce n'est pas le cas. – sgm

Répondre

0

Comme proposé (JOIN two SELECT statement results), LEFT JOIN résoudre le problème:

SELECT * FROM (
    SELECT 
     b.ref AS bait, 
     ts.id_baits, 
     SUM(strftime('%s',ts.endtime) -strftime('%s',ts.initime)) AS t, 
     COUNT(*) AS n 
    FROM TimeSegments as ts 
    INNER JOIN Baits as b ON b.id = ts.id_baits 
    GROUP BY ts.id_baits 
) BaitsUsage 
LEFT JOIN (
    SELECT 
     ts.id_baits, 
     COUNT(CASE WHEN e.Status=1 THEN 1 END) AS Undefined, 
     COUNT(CASE WHEN e.Status=1 THEN 1 END) AS GetClose, 
     COUNT(CASE WHEN e.Status=2 THEN 1 END) AS Threat, 
     COUNT(CASE WHEN e.Status=3 THEN 1 END) AS Attack, 
     COUNT(CASE WHEN e.Status=4 THEN 1 END) AS Hooked, 
     COUNT(CASE WHEN e.Status=5 THEN 1 END) AS Captured, 
     COUNT(CASE WHEN e.Status=6 THEN 1 END) AS Tagged, 
     COUNT (*) AS TOTAL 
    FROM CastingsEvents AS e 
    LEFT JOIN Trajectories AS tr ON tr.id = e.id_trajectories 
    LEFT JOIN TimeSegments AS ts ON ts.id = tr.id_timesegments 
    LEFT JOIN Baits AS b ON b.id = ts.Id_Baits 
    GROUP BY ts.id_baits 
) BaitsEvents 
ON BaitsUsage.id_baits=BaitsEvents.id_baits 
ORDER BY bait