COUNT в группе по условию - PullRequest
2 голосов
/ 19 марта 2012

У меня есть таблица A со следующими столбцами:

Status varchar
StateCode bit
OpportunityID int

, поэтому, если я это сделаю: SELECT count(distinct opportunityID) from table A group by Status Я получу счет.Теперь в том же запросе я хочу добавить еще столбцы с именами CurrentCount и HistoricalCount.Текущий счетчик - это счетчик уникального вариантаID для конкретного статуса, а StateCode = 0, а HistoricalCount - это счетчик уникального идентификатора для конкретного статуса и StateCode = 1. Другими словами, счетчик = (CurrentCount + HistoricalCount).

Как мне добиться этого?

Любые идеи и предложения приветствуются!

1 Ответ

7 голосов
/ 19 марта 2012

Вы можете использовать case в своих count выражениях, так что вы учитываете только, где StateCode имеет желаемое значение.

select Status,
       count(distinct OpportunityID) as [Count],
       count(distinct case when StateCode = 1 then OpportunityID end) as CurrentCount,
       count(distinct case when StateCode = 0 then OpportunityID end) as HistoricalCount
from YourTable
group by Status

Другими словами Count = (CurrentCount + HistoricalCount).

Нет, это не будет правдой, если у вас есть OpportunityID, который имеет StateCode как 1 и 0.

Ex:

declare @T table
(
  Status varchar(10),
  StateCode bit,
  OpportunityID int
)

insert into @T values
('Status1', 1, 1),
('Status1', 1, 2),
('Status1', 0, 2),
('Status2', 0, 1),
('Status2', 0, 2)

select Status,
        count(distinct OpportunityID) as [Count],
        count(distinct case when StateCode = 1 then OpportunityID end) as CurrentCount,
        count(distinct case when StateCode = 0 then OpportunityID end) as HistoricalCount
from @T
group by Status

Результат:

Status     Count       CurrentCount HistoricalCount
---------- ----------- ------------ ---------------
Status1    2           2            1
Status2    2           0            2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...