2015-10-07 60 views
0

有沒有一種方法可以根據SQL中的另一個列類型對行數進行計數?如何根據SQL中的另一個列類型對行數進行計數

數據庫:

Department | Resource Type | People 
=================================== 
HR   | manager  | john 
      | staff   | jason 
      | staff   | smith 
IT   | manager  | wendy 
      | staff   | emma 
      | staff   | jay 
      | staff   | cody 
HR2  | manager  | john 
      | staff   | terry 
      | staff   | mike 
      | staff   | fry 

預期輸出:

john, 5 employees 
wendy, 3 employees 

謝謝

+1

在你的數據,什麼樣的列值(S)建立經理和員工員工之間的關係?我沒有看到任何。對於員工而言,「部門」專欄真的是「空」嗎? – sstan

+0

部門列中缺少值。 – jarlh

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

回答

0

根據您的數據樣本,嘗試:

SELECT S.Department, 
     (SELECT TOP 1 SUB.People FROM dbo.Staff SUB 
     WHERE SUB.Department = S.Department 
     AND SUB.ResourceType = 'manager') as Manager, 
     COUNT(*) as Employees FROM dbo.Staff S 
    WHERE S.ResourceType = 'staff' 
    GROUP BY S.Department 

我做了一個假設這裏是Department將包含每個記錄的值,而不僅僅是經理,每個部門至少有一個經理。

SQL Fiddle

0

您可以通過創建2個臨時表做到這一點:

select People, sum(quantity) from(
select [ResourceType], People,quantity 
from tablename 
right join 
(
select Count(Department) quantity, Department 
from tablename 
group by [ResourceType], Department 
having [ResourceType] = 'staff') tmp1 on tablename.Department = tmp1.Department 
where [ResourceType] = 'Manager' 
) tmp2 
group by People 
+0

這隻適用於沒有相同名稱的經理 –

1

這actualy很容易使用接線即可完成。這也負責爲兩個不同部門的經理工作的員工以及一個擁有多個經理的部門。

SELECT t1.People as ManagerName, 
    count(distinct t2.People) 
FROM @Staff t1 
LEFT JOIN @Staff t2 ON t2.Department = t1.department 
    AND t2.ResourceType = 'staff' WHERE t1.ResourceType = 'manager' 
GROUP BY t1.People 
1

與其他答案一樣,我還必須假設所有行在Department列中都有值。否則,你無法做你所要求的。

此外,您的樣本數據似乎意味着每個部門只有一名經理。所以我也會做出這個假設。

一個簡單的查詢,這樣做會是這樣:

select mgr.people || ', ' || 
     count(staff.people) || ' employees' -- the string concatenation on these lines may vary depending on your database. 
    from TableName mgr 
    left join TableName staff 
    on staff.Department = mgr.Department 
    and staff.ResourceType = 'staff' 
where mgr.ResourceType = 'manager' 
group by mgr.people 
相關問題