2013-09-05 1 views
1

У меня есть таблица, как показано ниже -несколько условий счетов с одного запросом

Student ID | History | Maths | Geography 
1    A  B   B  
2    C  C   E 
3    D  A   B 
4    E  D   A 

Как узнать, сколько студентов получили в истории, B в математике и Е в географии с помощью одного запроса SQL?

+2

Что такое 'E'? –

+0

@GoatCO его плохие тестовые данные;) – logixologist

+0

прямо сейчас у меня есть три запроса. Я хочу сделать это, используя один запрос. – arc000

ответ

3

Если вы хотите, чтобы получить число студентов, которые получили в истории в одном столбце, количество студентов, которые получили B в математике во втором столбце и количество студентов, получивших Е в географии в третьей затем:

select 
    sum(case when [History] = 'A' then 1 else 0 end) as HistoryA, 
    sum(case when [Maths] = 'B' then 1 else 0 end) as MathsB, 
    sum(case when [Geography] = 'E' then 1 else 0 end) as GeographyC 
from Table1 

Если вы хотите посчитать студент, которые получили в истории, B по математике и Е в географии:

select count(*) 
from Table1 
where [History] = 'A' and [Maths] = 'B' and [Geography] = 'E' 
+0

Спасибо :-) Я новичок в sql и знаю только основные SQL-запросы. Это действительно помогло. – arc000

2

Если вы хотите независимые счетчики используют:

SELECT SUM(CASE WHEN Condition1 THEN 1 ELSE 0 END) AS 'Condition1' 
     ,SUM(CASE WHEN Condition2 THEN 1 ELSE 0 END) AS 'Condition2' 
     ,SUM(CASE WHEN Condition3 THEN 1 ELSE 0 END) AS 'Condition3' 
FROM YourTable 

Если вы хотите использовать несколько условий для одного счета использования:

SELECT COUNT(*) 
FROM YourTable 
WHERE Condition1 
    AND Condition2 
    AND Condition3 

Это звучит, как вы хотите использовать несколько независимых счетчиков:

SELECT SUM(CASE WHEN History = 'A' THEN 1 ELSE 0 END) AS 'History A' 
     ,SUM(CASE WHEN Maths = 'B' THEN 1 ELSE 0 END) AS 'Maths B' 
     ,SUM(CASE WHEN Geography = 'E' THEN 1 ELSE 0 END) AS 'Geography E' 
FROM YourTable 
0

Вы можете попытаться выбрать из нескольких отдельных заявлений

SELECT t1.*, t2.*, t3.* FROM 
(SELECT COUNT(*) AS h FROM students WHERE History = 'A') as t1, 
(SELECT COUNT(*) AS m FROM students WHERE Maths = 'B') as t2, 
(SELECT COUNT(*) AS g FROM students WHERE Geography = 'E') as t3 
Смежные вопросы