Вы можете использовать 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