我有兩個表,一個用於員工,另一個表示當前和過去的活動。我需要一個函數/查詢來根據類型爲下一個活動選擇一個員工。這裏是樣本數據:選擇基於員工的可用性查詢SQL Server 2012
表員工
EmployeesID UserName Type Available
1 Bill Clerical 1
2 Ann Clerical 1
3 John Technical 1
4 Jack Technical 0
5 Mary Clerical 0
6 Sam Technical 0
7 Mark Clerical 1
8 Andy Clerical 1
9 Rick Clerical 1
10 Nancy Clerical 1
活動
ActivityID EmployeesID Status Task_Datetime
101 2 Complete 6/11/2016 10:00
102 1 Complete 6/11/2016 10:12
103 3 Complete 6/11/2016 10:24
104 4 Complete 6/11/2016 10:36
105 7 Complete 6/11/2016 10:48
106 6 Complete 6/11/2016 11:00
107 5 Complete 6/11/2016 11:12
108 8 Complete 6/11/2016 11:24
109 10 Complete 6/11/2016 11:36
110 9 Complete 6/11/2016 11:48
111 5 Complete 6/11/2016 12:00
112 8 Complete 6/11/2016 12:12
113 3 Complete 6/11/2016 12:24
114 4 Complete 6/11/2016 12:36
115 1 Complete 6/11/2016 12:48
116 6 Complete 6/11/2016 13:00
117 7 Complete 6/11/2016 13:12
118 2 Complete 6/11/2016 13:24
119 9 Complete 6/11/2016 13:36
120 10 In Progress 6/11/2016 13:48
121 1 In Progress 6/11/2016 14:00
122 2 Complete 6/11/2016 14:12
123 3 Complete 6/11/2016 14:24
124 4 Complete 6/11/2016 14:36
125 6 In Progress 6/11/2016 14:48
需要分配給現有員工匹配的類型沒有活動正在進行 如果一切都在進步,如果返回0 多於一個可用,分配給分配的一個。
那麼如果下一個指派是文書工作,請不要拿1或10,因爲進行中, 而是拿走最後第一個完成的2,5,7,8,9(其他未被佔用的)文員8(跳過5不可用)。
如果下一個分配是技術性的,它應該去約翰,如果約翰不可用,應該返回null。
寫這樣的事情至今:
function: NextEmployee('Clerical')
Select EmployeeID from Employees e , Activities a where e.available= 1 and e.type='Clerical' and
請澄清一下您的問題。還請解釋Employees.Available和Activities.Status列的含義。根據上述數據提供樣本結果表。 – Alex
employees.available表示員工可供選擇。 Activities.status可以是完整的,這意味着員工完成了活動並且可以被選擇,或者狀態可以是進行中,這意味着員工正在處理某些事情。僱員可選,employees.available = 1和activities.status <>'進行中'。表格下方的文字顯示了預期結果的示例。 –