SQL-запрос с CASE и группировать по - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть таблица характеристик, где каждая функция идентифицируется по ее идентификатору (столбец БД) и таблице ошибок, где у каждой функции есть связь один ко многим с таблицей ошибок.

Feature Table has columns
id Description

Bugs Table has columns

ID Feature_ID Status

Я буду считать ошибку открытой, если ее состояние равно 0 или 1, и закрытой, если статус равен 2.

Я пытаюсь написать запрос, который указывает, может ли функция считаться пройденной или не выполненной в зависимости от ее состояния.

 select F.ID
        CASE WHEN count(B.ID) > 0 THEN 'FAIL'
             ELSE 'PASS' 
         END as FEATURE_STATUS 
 from Feature F,
      Bugs B 
where B.Status in (0,1) 
group by F.ID;

Мой запрос всегда дает Сбойные функции, но не прошел, как можно изменить мой запрос, чтобы он возвращал оба?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012
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
2 голосов
/ 01 февраля 2012

Звучит так, будто вы хотите что-то вроде

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...