是否可以使用 SQL 语句实现以下逻辑?如果实施,在 30 分钟的时间范围内处理 4000 个订单时是否存在潜在的性能风险。我们有 SQL Server 作为我们的数据库。
我有 2 个表格,如下所示。
订单
Cust_ID Cust_WHID Emp_ID 纬度 经度
C10001 WH142001 ?????? 13.051738 77.629877
C10002 WH142001 ?????? 13.047688 77.629279
C10003 WH142001 ?????? 13.043722 77.623373
C10004 WH142002 ?????? 13.047213 77.628853
User_Validation
User_ID User_WHID Latitude Longitude Current_Capacity
EMP100001 WH100001 13.033304 77.636592 5 EMP100002 WH100001 13.032645 77.629908 3 EMP100003 WH100001 13.046191 77.625797 0 EMP100004 WH100002 13.044981 77.626154 2 EMP100005 WH100002 13.052305 77.631151 4 EMP100006 WH100002 13.051004 77.630786 0
现在我想用以下标准更新 Orders 表中的 Emp_ID 字段。
- 从 User_Validation 表中查找每个仓库的员工人数。
- 通过将 User_Validation 表中员工的纬度和经度与 Order 表中客户的纬度和经度进行比较,找到离客户最近的员工。
- 最近的员工 Current_Capacity 不应超过 6。
- 如果它已经是 6 则找到下一个没有最大容量的员工,依此类推,直到找到员工。
- 如果所有员工的容量为 6,则将最近的员工 ID 分配给客户
我尝试了以下逻辑,我知道当有多个记录时它不会起作用。我什至尝试了一条记录,但语句中出现错误。
Update Orders Set Emp_ID=User_Validation.User_ID from (Select User_ID from
User_Validation where Current_Capacity <='6' and (SELECT Top 1 User_ID, (( 6367450 *
acos( cos( radians(Orders.Latitude) ) * cos( radians( User_Validation.Latitude ) ) *
cos( radians( User_Validation.Longitude ) - radians(Orders.Longitude) ) + sin(
radians(Orders.Latitude) ) * sin( radians( User_Validation.Latitude ) ) ) )) AS
distance_Mtrs FROM Orders, User_Validation order by distance_Mtrs)) where
Orders.Cust_WHID=User_Validation.User_WHID