Как вернуть счетчик, а не счетчик в запросе SQL? - PullRequest
4 голосов
/ 13 апреля 2010

Если у меня есть стол

AgentID | IsNew | TeamID
1         N       1
2         Y       2
3         Y       2
4         N       2
5         Y       1

Я хочу вернуть из запроса следующее:

Team | CountIsNew = N | CountIsNew = Y
1      1                1
2      1                2

Есть ли способ, которым я могу это сделать?
Использование Oracle 10

Ответы [ 3 ]

8 голосов
/ 13 апреля 2010
SELECT  team, SUM(DECODE(IsNew, 'N', 1, 0)), SUM(DECODE(IsNew, 'Y', 1, 0))
FROM    mytable
GROUP BY
        team
5 голосов
/ 13 апреля 2010
SELECT TeamId
     , SUM(CASE WHEN IsNew = 'N' THEN 1 ELSE 0 END) AS CountIsNotNew
     , SUM(CASE WHEN IsNew = 'Y' THEN 1 ELSE 0 END) AS CountIsNew
FROM Agent
GROUP BY TeamId
0 голосов
/ 14 апреля 2010

Еще один способ - COUNT не считает NULL (кроме COUNT(*)):

SELECT TeamId,
       COUNT(DECODE(IsNew,'N',1)) CountIsNotNew,
       COUNT(DECODE(IsNew,'Y',1)) CountIsNew
FROM Agent
GROUP BY TeamId;

Или, если вы предпочитаете CASE:

SELECT TeamId,
       COUNT(CASE IsNew WHEN 'N' THEN 1 END) CountIsNotNew,
       COUNT(CASE IsNew WHEN 'Y' THEN 1 END) CountIsNew
FROM Agent
GROUP BY TeamId;

(примечание: «1» может быть любым буквенным значением)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...