2015-11-29 33 views
0

我有2代表持有Empolyee和Office數據:如何獲得一個類別的最大數量?

  • EMPLOYEE (EmpID, Role, OfficeNumber)
  • OFFICE (OfficeNumber, Region, Manager)

員工可以在不同的角色多個辦公室進行登記。

例如員工下方是2個辦事處(20 & 50)註冊,但在辦公室的20多個項目,所以我們要選擇的是他的「家」辦公室

EmpID | Role | Region | Manager | OfficeNumber 

15 | 1 | East | James | 20 
15 | 4 | East | James | 20 
15 | 5 | East | James | 20 
15 | 1 | West | George | 50 
15 | 5 | West | George | 50 

基本上,我想哪個職位員工是在最該區域註冊的計數,然後返回經理爲辦公..

因此,對於以上員工爲他們的「家庭辦公室」的結果將是:

EmpID | Region | Manager | OfficeNumber 
15 | East | James | 20 

這是我放在一起的SQL。

SELECT 
    EmpID, Manager, Region, 
    Count (OfficeNumber), 
    Row_Number(Partition by EmpID ORDER by 
    Count(OfficeNumber) Desc) 
FROM 
Employees e 
JOIN 
Offices o ON e.OfficeNumber = o.OfficeNumber 

不知道我是否正確使用Row_Number函數或是否會有更好的方法?

+0

如果empid 15恰好有3個記錄的第20和50位,會發生什麼?什麼是empid 15的總部? – zedfoxus

+0

我沒有想到這種情況:/你知道一個案例陳述是否可行嗎? – Swazzy

+0

當需求已知時,'CASE'語句將有所幫助。我的問題試圖找到在描述的情況下應該顯示的內容。根據您的需求,我們可以確定需要哪些聲明。另外,你用MySQL標記了這個問題。這個問題是用SQL Server標籤編輯的。你真的在使用哪個數據庫 - MySQL還是SQL Server或其他? – zedfoxus

回答

0

兩個CTE可以完成這項工作。第一個爲每個員工/辦公室創建計數,第二個爲每個員工獲得總部。希望它能正常工作4ü

with CountCte as (
SELECT *,count(*) over (partition by [EmpID],[OfficeNumber]) OfficeCount 
FROM 
Employees e 
JOIN 
Offices o ON e.OfficeNumber = o.OfficeNumber), 
MainCte as (
select *,row_number() over (partition by [EmpID] order by OfficeCount desc) r 
from CountCte) 
select EmpID 
     ,Region 
     ,Manager 
     ,OfficeNUmber 
from MainCte 
where r = 1 
相關問題