2017-09-04 4 views
0

J'essaie de compter le nombre de lignes qui sont> = 1 OU < = -1 basé sur la somme (temps rtime).Compte le nombre de lignes de la somme

Ma table

aono | aopos | artno | flogr | prgr | rtime | time | rdate  | 
7132 | 10 | 1234 | 20 | 20 | 2 | 1 | 2017-08-24 | 
7132 | 10 | 1234 | 30 | 30 | 1,3 | 1 | 2017-08-24 | 
7132 | 20 | 5678 | 20 | 29 | 1 | 3 | 2017-08-24 | 
7132 | 20 | 5678 | 30 | 31 | 0,4 | 1,5 | 2017-08-24 | 
7132 | 50 | 12 | 10 | 10 | 0,5 | 0,5 | 2017-08-24 | 

J'ai fait cette requête.

SELECT aono, aopos, artno, flogr, prgr, sum(rtime-time) AS Diff 
FROM dbo.ao 
WHERE (rdate Between '2017-08-01' AND '2017-08-31') AND (flogr = '20' OR flogr = '30') 
GROUP BY aono, aopos, artno, flogr, prgr 
HAVING SUM(rtime-time) >= '1' OR SUM(rtime-time) <= '-1' 

qui renvoie le résultat suivant

aono | aopos | artno | flogr | prgr | Diff 
7132 | 10 | 1234 | 20 | 20 | 1  
7132 | 20 | 5678 | 20 | 29 | -2 
7132 | 20 | 5678 | 30 | 31 | -1,1 

Alors ce que je besoin d'aide avec est de créer une requête qui compte le nombre de lignes (Diff) en fonction de la requête ci-dessus. Dans cet exemple, le résultat correct serait 3.

Merci à l'avance

/Sisu

+0

Enveloppez votre requête actuelle dans un dérivé ed table, et compte ses lignes. – jarlh

Répondre

4

Vous êtes presque là il suffit d'utiliser COUNT

SELECT COUNT(*) 
FROM 
(
    SELECT aono, aopos, artno, flogr, prgr, sum(rtime-time) AS Diff 
    FROM dbo.ao 
    WHERE (rdate Between '2017-08-01' AND '2017-08-31') AND (flogr = '20' OR flogr = '30') 
    GROUP BY aono, aopos, artno, flogr, prgr 
    HAVING SUM(rtime-time) >= '1' OR SUM(rtime-time) <= '-1') 
) t 
+0

C'est facile hein. Merci beaucoup :) – SisU

2

Vous devez exécuter la COUNT sur votre requête

SELECT COUNT(*) FROM 
(SELECT aono, aopos, artno, flogr, prgr, sum(rtime-time) AS Diff 
FROM dbo.ao 
WHERE (rdate Between '2017-08-01' AND '2017-08-31') 
AND (flogr = '20' OR flogr = '30') 
GROUP BY aono, aopos, artno, flogr, prgr 
HAVING SUM(rtime-time) >= '1' OR SUM(rtime-time) <= '-1')