2014-12-10 4 views
0

Я пытаюсь создать инструкцию select count, где оператор where отличается для каждой строки.
Например я получил следующую таблицу под названием dbo.job:Sql Выбрать оператор с разными операторами where

User: Job: 
Mark  Garbageman 
Dirk  Garbageman 
Henk  Garbageman 
Steven Garbageman 
Mark  Delivery 
Dirk  Delivery 
Henk  Delivery 
Steven Delivery 
Stevens Delivery 

Теперь я хочу знать, сколько пользователей я получил в таблице «работы» с работой в Мусорщик, для этого я использую:

Select COUNT(user) as count from job WHERE job.job = 'Garbageman' 

я получаю следующий результат:

Count: 
4 

Теперь я также хочу знать, сколько пользователей получили работу доставки в том же операторе выбора, я получу что-то как:

Select COUNT(user) as GarbageCount, COUNT(user) as Deliverycount from job WHERE job.job = 'Garbageman' 

Теперь я получу следующий результат:

GarbageCount: DelivryCount: 
4    4 

Но я хочу:

Теперь я получу следующий результат:

GarbageCount: DelivryCount: 
4    5 

Я знаю, почему мой оператор не работает, потому что я использую только оператор 1 where. Но то, что говорит как GarbageCount, так и DeliveryCount, разные. И я просто не знаю, как создать такой запрос.

У кого-то есть предложения?

ответ

0

Вы можете добиться этого с помощью условного sum()

select 
sum(Job = 'Garbageman') as GarbageCount, 
sum(Job = 'Delivery') as DelivryCount 
from job 
0

Вы можете использовать условную агрегацию. Стандартный метод ANSI является:

Select sum(case when j.job = 'Garbageman' then 1 else 0 end) as GarbageCount, 
     sum(case when j.job = 'Delivery' then 1 else 0 end) as Deliverycount 
from job j; 

Вы не указать базу данных, но MySQL также предлагает ярлык:

Select sum(j.job = 'Garbageman') as GarbageCount, 
     sum(j.job = 'Delivery') as Deliverycount 
from job j; 
+0

Спасибо и сэр! это работает для меня! Любите этот сайт! : D я буду принимать ответ за 2 минуты – Urjen

Смежные вопросы