2 votes

Compte de SQL Server 2008

J'ai créé une base de données simple pour stocker les résultats des tests, mais j'ai du mal avec le compte SQL pour totaliser mes succès/échecs/avertissements afin de les présenter.

L'idée est qu'une série de tests (TRID) aura plusieurs ensembles de tests (TSID), chacun avec plusieurs cas de tests (TCID).

  1. Le total doit être égal au nombre de cas de test pour ce TSID.
  2. Il faut passer un nombre égal de cas de test avec toutes les étapes de StatusID=1.
  3. L'échec devrait être égal au nombre de cas de test avec 1 ou plusieurs étapes de StatusID=2.
  4. L'avertissement doit concerner un nombre égal de cas de test avec 1 ou plusieurs étapes de StatusID=3, mais les mêmes cas de test ne doivent pas comporter d'échecs. S'il y a une étape qui échoue, le scénario de test doit échouer comme indiqué ci-dessus.

SQL pour créer un exemple simplifié de mon tableau de résultats :-.

create table Results (StatusID int, TRID int, TSID int, TCID int);

--Test Set 1 / Test Case 1.
INSERT INTO Results VALUES (1, 1, 1, 1)
INSERT INTO Results VALUES (1, 1, 1, 1)
INSERT INTO Results VALUES (1, 1, 1, 1)
--Test Set 1 / Test Case 2
INSERT INTO Results VALUES (1, 1, 1, 2)
INSERT INTO Results VALUES (1, 1, 1, 2)

--Test Set 2 / Test Case 1
INSERT INTO Results VALUES (1, 1, 2, 1)
INSERT INTO Results VALUES (1, 1, 2, 1)
INSERT INTO Results VALUES (1, 1, 2, 1)
--Test Set 2 / Test Case 2
INSERT INTO Results VALUES (1, 1, 2, 2)
INSERT INTO Results VALUES (2, 1, 2, 2)

--Test Set 3 / Test Case 1
INSERT INTO Results VALUES (1, 1, 3, 1)
INSERT INTO Results VALUES (1, 1, 3, 1)
INSERT INTO Results VALUES (1, 1, 3, 1)
--Test Set 3 / Test Case 2
INSERT INTO Results VALUES (1, 1, 3, 2)
INSERT INTO Results VALUES (3, 1, 3, 2)

--Test Set 4 / Test Case 1
INSERT INTO Results VALUES (1, 1, 4, 1)
INSERT INTO Results VALUES (1, 1, 4, 1)
INSERT INTO Results VALUES (1, 1, 4, 1)
--Test Set 4 / Test Case 2
INSERT INTO Results VALUES (3, 1, 4, 2)
INSERT INTO Results VALUES (2, 1, 4, 2)

SELECT * FROM Results

Mon SQL actuel (qui, comme vous le verrez, me fournit le mauvais nombre d'avertissements :-)

DECLARE @trid INT
SET @trid = 1

SELECT TRID, TSID,
(SELECT COUNT(DISTINCT TCID) FROM Results WHERE R.TRID = @trID AND R.TSID = TSID) As Total,
(SELECT COUNT(DISTINCT TCID) FROM Results WHERE TRID = @trID AND R.TSID = TSID) - (SELECT COUNT(DISTINCT TCID) FROM Results WHERE TRID = @trID AND R.TSID = TSID AND StatusID = 2) - (SELECT COUNT(DISTINCT TCID) FROM Results WHERE TRID = @trID AND R.TSID = TSID AND StatusID = 3 AND (SELECT COUNT(DISTINCT TCID) FROM Results WHERE TRID = @trID AND R.TSID = TSID AND StatusID = 2) = 0) AS Pass,
(SELECT COUNT(DISTINCT TCID) FROM Results WHERE R.TSID = TSID AND StatusID=2) As Fail,
(SELECT COUNT(DISTINCT TCID) FROM Results WHERE R.TSID = TSID AND StatusID=3) As Warning
FROM Results R
WHERE TRID = @TRID
GROUP BY TRID, TSID

D'après le SQL ci-dessus, les résultats incorrects actuels sont les suivants : -.

TRID    TSID    Total   Pass    Fail    Warning
1       1       2       2       0       0
1       2       2       1       1       0
1       3       2       1       0       1
1       4       2       1       1       1*

Les résultats doivent être....

TRID    TSID    Total   Pass    Fail    Warning
1       1       2       2       0       0
1       2       2       1       1       0
1       3       2       1       0       1
1       4       2       1       1       0*  

Gracias

4voto

Andomar Points 115404

Vous pourriez calculer les statistiques par cas de test (TCID) dans une sous-requête. La requête externe pourrait alors calculer les statistiques par jeu de test (TSID). Par exemple :

select  TRID
,       TSID
,       count(*) as Total
,       sum(case when FailSteps = 0 and WarnSteps = 0 then 1 else 0 end) as Pass
,       sum(case when FailSteps > 0 then 1 else 0 end) as Fail
,       sum(case when FailSteps = 0 and WarnSteps > 0 then 1 else 0 end) as Warning
from    (
        select  TRID
        ,       TSID
        ,       TCID
        ,       sum(case when StatusID = 1 then 1 else 0 end) as PassSteps
        ,       sum(case when StatusID = 2 then 1 else 0 end) as FailSteps
        ,       sum(case when StatusID = 3 then 1 else 0 end) as WarnSteps
        from    Results
        group by
                TRID
        ,       TSID
        ,       TCID
        ) as TestCases
group by
        TRID
,       TSID

Exemple en direct sur SQL Fiddle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X