2015-10-27 2 views
-1

У меня есть столбцы в таблице, как это:Как рассчитывать на основе нескольких столбцов в SQL Server?

race | active 
=============== 
asian | false 
black | true 
asian | false 
white | true 
asian | false 
black | false 
asian | false 
white | false 
asian | false 
black | true 
black | true 
asian | false 
white | true 
asian | false 
black | false 

Мне нужно вычислить количество как

white-active : 2 
asian-active : 
black-active : 
asian-inactive : 
white-inactive : 
black-inactive : 

Как я могу добиться этого в SQL Server 2008?

+1

Подсказка: посмотрите 'group by' –

ответ

0

Вы можете попробовать этот код:

SELECT race + '-active : ' + CAST(count(active) OVER(PARTITION BY race) AS VARCHAR) output 
FROM Your_Table WHERE active='true' 
union all 
SELECT race + '-inactive : ' + CAST(count(active) OVER(PARTITION BY race) AS VARCHAR) output 
FROM Your_Table WHERE active='false' 
+0

спасибо человеку ... точно, что я искал ... –

+0

Добро пожаловать! –

1

может попробовать этот

select race||'-active'||' : '||count(active) as output 
from table 
where active='true' 
group by race 
union all 
select race||'-inactive'||' : '||count(active) as output 
from table 
where active='false' 
group by race 
+1

Вы можете удалить избыточную секцию 'FROM ... WHERE ... GROUP BY', если вы используете' CASE'. –

0

Как было упомянуто в комментариях:

SELECT race, active, COUNT(*) 
FROM t 
GROUP BY race, active; 

Или, если вам действительно нужно, что точный вывод строки:

SELECT 
    race || '-' || 
    case when active = 'true' then 'active' else 'inactive' end || 
    ' : ' || COUNT(*) 
FROM t 
GROUP BY race, active;