我有两张桌子,即。#Exported_Data 和 User_Details。
#Exported_Data:(User_Id、User_Name、Status、Office_Id、Dept_Id、Service_Id、Allocation)
User_Details:(User_Id、Office_ID、Dept_Id、Service_Id、ServiceAllocation)
在#Exported_Data 表中,状态可以是非活动的或活动的。
在 User_Details 表中,Allocation 可以介于 0 和 1 之间。
User_Details 表是一个事务表,#Exported_Data 表是一个临时表,其中包含所有需要根据特定条件插入到事务表中的记录。
我有一个查询:
insert into User_Details (User_Id, Office_ID, Dept_Id, Service_Id, ServiceAllocation)
select
User_Id,
Office_Id,
Dept_Id,
Service_Id,
Allocation
from #Exported_Data ED
where not exists (select Office_ID, Dept_ID, Service_ID from User_Details UD where UD.User_Id = ED.User_Id)
在上面的查询中,我必须根据某些条件插入一个 Allocation 值来代替 Allocation。条件是:
如果 #Exported_Data 中用户的状态为非活动状态,则分配 0,否则
(1) 从#Exported_Data 获取用户分配
(2) 从 User_Details 表中获取用户的 sum(Allocation)
(3) 如果 (1) + sum(Allocation) < 1 的分配,则此分配值否则跳过插入
我尝试使用 CASE 语句,但它变得太复杂而无法形成正确的查询。在插入时,我正在检查事务表中是否存在组合(User_ID、Office_ID、Dept_Id、Service_ID)。查询不应插入重复行。它应该只插入唯一的行。例如,用户 1 可以在两个不同的部门,或者可以有不同的服务 ID。
我在查询中想要的分配值是:
#Exported_Data + sum(ServiceAllocation) 的分配值