我正在尝试创建一个存储过程,用于将客户呼叫分配给呼叫者。我们有几个调用者团队,由变量@team_id标识。我想要做的是检查并查看客户(@code)是否还有人分配给他们。如果他们这样做,则返回该人的身份证。如果没有,请运行THEN语句,确定应将其分配给谁,将记录更新到该调用者,并返回该调用者的ID。这是我的,但它不会让我在选择内部运行更新。我想避免每次都更新表(如果可以的话,在存储过程的末尾添加一个update子句)。
declare @team_id char(3), @code char(4)
--If team is an intake department
if (@team_id IN ('03V', '09X'))
SELECT
CASE
WHEN a.intake_caller_id IS NOT NULL and a.intake_caller_id <> '' THEN a.intake_caller_id
ELSE
(
SELECT employee_id
FROM
(
SELECT TOP 1 COUNT(a.id) as count, a.employee_id
FROM event.dbo.event a
JOIN event.dbo.event_triage b ON a.employee_id = b.employee_id
WHERE task_id in ('WS', 'WF', 'WT', 'WU' ) and a.status = 1 AND b.team_id = @team_id
GROUP BY a.employee_id
ORDER BY count ASC
) a
update event.dbo.referral_data
SET intake_caller_id = a.employee_id
WHERE CODE_ = @code
)
END
FROM event.dbo.referral_data a
WHERE CODE_ = @code
ELSE
--if team is a PO department
IF (@team_id IN ('00R', '154'))
SELECT
CASE
WHEN @team_id = '00R' AND intake_rx_caller_id IS NOT NULL AND intake_rx_caller_id <> '' THEN intake_rx_caller_id
WHEN @team_id = '00R' AND (intake_rx_caller_id IS NULL OR intake_rx_caller_id = '') THEN
(
SELECT employee_id
FROM
(
SELECT top 1 COUNT(a.id) as count, a.employee_id
FROM event.dbo.event a
JOIN event.dbo.event_triage b ON a.employee_id = b.employee_id
WHERE task_id IN ('WR', 'CR') AND status = 1 and b.team_id = '00R'
GROUP BY a.employee_id
ORDER BY count ASC
) a
)
WHEN @team_id = '154' AND reorder_rx_caller_id IS NOT NULL AND reorder_rx_caller_id <> '' THEN reorder_rx_caller_id
WHEN @team_id = '154' AND (reorder_rx_caller_id IS NULL OR reorder_rx_caller_id = '') THEN
(
SELECT employee_id
FROM
(
SELECT top 1 COUNT(a.id) as count, a.employee_id
FROM event.dbo.event a
JOIN event.dbo.event_triage b ON a.employee_id = b.employee_id
WHERE task_id IN ('RS', 'RY') AND status = 1 and b.team_id = '154'
GROUP BY a.employee_id
ORDER BY count ASC
)a
)
END
FROM event.dbo.doctor_data
WHERE CODE_ = @code
答案 0 :(得分:0)
为什么不首先更新,然后在第一个IF语句中进行选择。 您可以在update语句中应用相同的条件逻辑。
编辑:这是代码。虽然没有经过测试....
DECLARE @team_id CHAR(3)
, @code CHAR(4)
IF ( @team_id IN ( '03V' , '09X' ) )
BEGIN
;WITH CTE
AS ( SELECT TOP 1
COUNT(a.id) AS count
, a.employee_id
FROM event.dbo.event a
JOIN event.dbo.event_triage b
ON a.employee_id = b.employee_id
WHERE task_id IN ( 'WS' , 'WF' , 'WT' , 'WU' )
AND a.status = 1
AND b.team_id = @team_id
GROUP BY a.employee_id
ORDER BY count ASC
)
UPDATE a
SET intake_caller_id = ( SELECT employee_id FROM CTE)
FROM event.dbo.referral_data AS a
WHERE CODE_ = @code
AND ISNULL(a.intake_caller_id,'')=''
SELECT a.intake_caller_id
FROM event.dbo.referral_data a
WHERE CODE_ = @code
END
ELSE
IF ( @team_id IN ( '00R' , '154' ) )
BEGIN
SELECT CASE WHEN @team_id = '00R'
AND intake_rx_caller_id IS NOT NULL
AND intake_rx_caller_id <> '' THEN intake_rx_caller_id
WHEN @team_id = '00R'
AND ( intake_rx_caller_id IS NULL
OR intake_rx_caller_id = ''
) THEN ( SELECT employee_id
FROM ( SELECT TOP 1
COUNT(a.id) AS count
, a.employee_id
FROM event.dbo.event a
JOIN event.dbo.event_triage b
ON a.employee_id = b.employee_id
WHERE task_id IN ( 'WR' , 'CR' )
AND status = 1
AND b.team_id = '00R'
GROUP BY a.employee_id
ORDER BY count ASC
) a
)
WHEN @team_id = '154'
AND reorder_rx_caller_id IS NOT NULL
AND reorder_rx_caller_id <> '' THEN reorder_rx_caller_id
WHEN @team_id = '154'
AND ( reorder_rx_caller_id IS NULL
OR reorder_rx_caller_id = ''
) THEN ( SELECT employee_id
FROM ( SELECT TOP 1
COUNT(a.id) AS count
, a.employee_id
FROM event.dbo.event a
JOIN event.dbo.event_triage b
ON a.employee_id = b.employee_id
WHERE task_id IN ( 'RS' , 'RY' )
AND status = 1
AND b.team_id = '154'
GROUP BY a.employee_id
ORDER BY count ASC
) a
)
END
FROM event.dbo.doctor_data
WHERE CODE_ = @code
END