2014-11-21 37 views
0

因此,假設您擁有以下表示公司內部員工的數據。列中的一個是它們的唯一的ID,第2列是他們的主管的ID,且將列3表示該僱員是否未超過21(Y意味着它們是超過21,N意味着它們不是)根據列與另一列的關係獲取SUM(SQL)

|Employee ID |Supervisor ID|Over21| 
    ----------------------------------- 
    |1   |1   |Y  | 
    |2   |1   |N  | 
    |3   |1   |Y  | 
    |4   |2   |Y  | 
    |5   |2   |Y  | 
    |6   |3   |N  | 
    |7   |3   |N  | 

所以,如果我想找到超過21名僱員的人數,我能做到這一點有相當容易:

SELECT SUM(CASE WHEN [Over21] IS 'Y' THEN 1 ELSE 0 END) 

但是,假設你想找到有一個職工監事的人數即超過21。 (在這個例子中它會是2)。我一直在努力尋找一種方法來寫出一種方法來發現,但我一直在努力掙扎。

回答

4
select count (distinct Supervisor) 
from your_tab 
where Over21 = 'Y'; 

沒有其中:

select count (distinct case when Over21 = 'Y' then Supervisor else null end) 
from your_tab; 
+0

演示的溶液。 http://sqlfiddle.com/#!2/24ce5f/6 – Daileyo 2014-11-21 21:31:32

+0

@Daileyo謝謝 – Multisync 2014-11-21 21:33:19

+0

啊好吧,謝謝你回答這個問題。我想我沒有問正確的問題,因爲我正在做一個有多個其他計數的陳述,所以我不能讓where子句影響所有的計數。 感謝您的回答,雖然它回答了我的問題,但我會標記爲正確的。 – JaGo 2014-11-21 21:36:47