2012-02-01 5 views
0

J'ai une table d'entités dans laquelle chaque entité est identifiée par son ID (colonne DB) et sa table Bugs où chaque entité a une ou plusieurs relations avec la table de bogues.Requête SQL avec CASE et groupe par

Feature Table has columns 
id Description 

Bugs Table has columns 

ID Feature_ID Status 

Je considère comme un bug ouvert si son état est 0 ou 1 et comme fermé si l'état est 2.

Je suis en train d'écrire une requête qui indique si une fonction peut être considéré comme adopté ou a échoué en fonction de son statut. Ma requête donne toujours les fonctionnalités ayant échoué mais pas passé, comment modifier ma requête pour retourner les deux?

+0

Cela n'a aucun sens du tout B.ID est toujours plus alors> 0 pour tous les tuples seront échoué. – JonH

+0

Qu'est-ce qui fait qu'un enregistrement devient dans un état d'échec ou de passage - vous ne le mentionnez pas. – JonH

+0

@JonH j'ai déjà mentionné que ma requête est erronée et que alwyas renvoie un statut échoué. Il est marqué comme réussi ou échoué par un client externe – Poorna

Répondre

2

On dirait que vous voulez quelque chose comme

SELECT f.id, 
     (CASE WHEN open_bugs = 0 
      THEN 'PASS' 
      ELSE 'FAIL' 
     END) feature_status, 
     open_bugs, 
     closed_bugs 
    FROM (SELECT f.id, 
       SUM(CASE WHEN b.status IN (0,1) 
         THEN 1 
         ELSE 0 
        END) open_bugs, 
       SUM(CASE WHEN b.status = 2 
         THEN 1 
         ELSE 0 
        END) closed_bugs 
      FROM feature f 
       JOIN bugs b ON (f.id = b.feature_id) 
     GROUP BY f.id) 
2
SELECT F.ID, 
     CASE WHEN SUM(CASE WHEN B.ID IN (0, 1) THEN 1 ELSE 0 END) > 0 THEN 'Fail' 
      ELSE 'Success' END AS FEATURE_STATUS 
from Feature F 
     JOIN Bugs B ON B.Feature_ID = F.ID  
group by F.ID