2015-06-24 5 views
0

Моя таблица выглядит следующим образом:Группа по и сосчитать apperances в другой колонке

---------------------------------------------- 
|id | action | building | date  | 
---------------------------------------------- 
|1  | IN  | 1000  | 01-01-2015 | 
|2  | OUT  | 1000  | 01-01-2015 | 
|3  | OUT  | 1000  | 05-01-2015 | 
|4  | IN  | 2000  | 01-01-2015 | 
---------------------------------------------- 

Я хотел бы, чтобы группа результат за счет строительства и подсчитать, сколько в и из действий существует. Данные и идентификатор не имеют значения в результате. Результат должен быть следующим:

------------------------- 
| Building | IN | OUT | 
------------------------- 
| 1000  | 1 | 2 | 
| 2000  | 1 | 0 | 
------------------------- 

Столкновение может содержать только IN и OUT.

Моя лучшая попытка:

select distinct (action), building, count(*) 
from table 
group by action, building 

Выход:

------------------------------------- 
| action  | Building | count(*) | 
------------------------------------- 
| IN   | 1000  | 1  | 
| OUT  | 1000  | 2  | 
| IN   | 2000  | 1  | 
------------------------------------- 

ответ

2

ли это с условной агрегации:

select Building, 
     sum(case when action = 'IN' then 1 else 0 end) as [IN], 
     sum(case when action = 'OUT' then 1 else 0 end) as [OUT], 
from TableName 
group by Building 
+0

Превзошел меня на 1 секунду: =) –

+0

Спасибо, это сработало для меня !!! Как вы изменили макет таблицы в вопросе, я хотел сделать то же самое? – Sebastian

+0

@Sebastian, вы просто выбираете текст и нажимаете '{}', чтобы пометить текст как код. –

0

Вы должны использовать условную агрегацию:

select building, 
     count(CASE WHEN action = 'IN' THEN 1 END) AS 'IN', 
     count(CASE WHEN action = 'OUT' THEN 1 END) AS 'OUT' 
from table 
group by building 
Смежные вопросы