2016-11-27 3 views
2

Например, у моей таблицы есть данные - 10 добровольцев. Есть два типа добровольцев - студенты и сотрудники. Как можно вставить несколько столбцов в одной таблице с этой точкой зрения:Значения COUNT в разных столбцах одной таблицы SQL

COUNT (Volunteer_id), COUNT (Volunteer_id) WHERE Volunteer_type = 'Студент', COUNT (Volunteer_id WHERE Volunteer_type = 'Персонал'

SELECT COUNT(Volunteer_id) AS "TOTAL VOLUNTEERS" 
from volunteer 
UNION 
SELECT COUNT(Volunteer_id) AS "TOTAL VOLUNTEERS" 
from volunteer 
WHERE Volunteer_type = 'Staff' 
UNION 
SELECT COUNT(Volunteer_id) AS "TOTAL VOLUNTEERS" 
from volunteer 
WHERE Volunteer_type = 'Student' 

Эти утверждения представляются в виде строк на данный момент, но я хочу, чтобы сделать их столбцы,

ответ

5

Использование условной агрегации:

SELECT 
    COUNT(*) AS "Total Volunteers", 
    COUNT(CASE WHEN Volunteer_tpye = 'Staff' THEN 1 END) AS "Staff Volunteers", 
    COUNT(CASE WHEN Volunteer_tpye = 'Student' THEN 1 END) AS Student 
FROM volunteers 
+0

Oracle показывает ошибку ORA-00936: недостающее выражение –

+0

Это не выглядит как синтаксис Oracle, и на самом деле это не выглядит как SQL вообще. Вы имели в виду 'select count (*) как total_volunteers, .....'? – mathguy

+0

Обновлен для синтаксиса ORACLE. –

-1
DECLARE @volunteer TABLE 
(Volunteer_id int 
,Volunteer_type varchar(50)) 

INSERT INTO @volunteer VALUES (1,'Staff') 
INSERT INTO @volunteer VALUES (1,'Staff') 
INSERT INTO @volunteer VALUES (1,'Staff') 

INSERT INTO @volunteer VALUES (1,'Student') 
INSERT INTO @volunteer VALUES (1,'Student') 
INSERT INTO @volunteer VALUES (1,'Student') 


SELECT COUNT(Volunteer_id) AS "TOTAL VOLUNTEERS" 
     ,(
      SELECT COUNT(tb1.Volunteer_id) AS "TOTAL VOLUNTEERS" 
      FROM @volunteer AS tb1 
      WHERE tb1.Volunteer_id = tb.Volunteer_id 
      AND tb1.Volunteer_type = 'Staff' 


     ) 
     ,(
      SELECT COUNT(volunteer_Student.Volunteer_id) AS "TOTAL VOLUNTEERS" 
      FROM @volunteer AS volunteer_Student 
      WHERE volunteer_Student.Volunteer_id = tb.Volunteer_id 
      AND volunteer_Student.Volunteer_type = 'Student' 
     ) 
FROM @volunteer tb 
GROUP BY tb.Volunteer_id 
+0

ORA-00907: отсутствует правая скобка. Где может быть ошибка? Код выглядит правильно –

+0

Уверен, что вы скопировали весь код – kareem

+0

Я скопировал и вложил полный код, 100% уверен) –

0

Попробуйте это:

select 
    sum(t.x_all) cnt_all, 
    sum(t.x_staff) cnt_staff, 
    sum(t.x_student) cnt_student 
from (
    select 
    1 x_all, 
    case when v.volunteer_type = 'Staff' then 1 else 0 end x_staff, 
    case when v.volunteer_type = 'Student' then 1 else 0 end x_student 
    from volunteer v 
) t 
+0

Прочитайте и поймите решение Феликса, он показал, как это сделать за один шаг. Вы опубликовали более слабое решение после того, как лучшее было уже опубликовано, я не вижу смысла. – mathguy

+0

@mathguy Посмотрите на отметки времени. О «более слабых» решениях - есть много способов решить эту проблему. Это одно, и я могу утверждать, что это более читаемо и понятно. – Bostjan

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