2016-11-27 82 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

甲骨文顯示了一個錯誤ORA-00936:缺少表達 –

+0

這看起來並不像甲骨文的語法,實際上它並沒有真正像SQL的。你的意思是'選擇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

閱讀並理解Felix的解決方案,他展示瞭如何一步完成此任務。在發佈了更好的解決方案後,您發佈了一個較弱的解決方案,但我沒有看到這一點。 – mathguy

+0

@mathguy看看時間戳。關於「較弱」的解決方案 - 有很多方法可以解決這個問題。這是一個,我可以爭辯說它更具可讀性和可理解性。 – Bostjan

相關問題