我有一个视图,其中包含工作列表,其中包含诸如分配给谁以及他们所处阶段之类的数据。我需要编写一个存储过程来返回每个人在每个阶段有多少工作。
到目前为止,我有这个(简化):
DECLARE @ResultTable table
(
StaffName nvarchar(100),
Stage1Count int,
Stage2Count int
)
INSERT INTO @ResultTable (StaffName, Stage1Count)
SELECT StaffName, COUNT(*) FROM ViewJob
WHERE InStage1 = 1
GROUP BY StaffName
INSERT INTO @ResultTable (StaffName, Stage2Count)
SELECT StaffName, COUNT(*) FROM ViewJob
WHERE InStage2 = 1
GROUP BY StaffName
问题在于行不合并。因此,如果工作人员在 stage1 和 stage2 中有工作,那么@ResultTable 中有两行。我真正想做的是更新该行,如果存在该行,则如果该行不存在,则插入一个新行。
有谁知道如何做到这一点,或者可以提出不同的方法?我真的很想避免使用游标来迭代用户列表(但这是我的后备选项)。
我正在使用 SQL Server 2005。
编辑:@Lee:不幸的是 InStage1 = 1 是一种简化。它真的更像 WHERE DateStarted IS NOT NULL 和 DateFinished IS NULL。
编辑:@BCS:我喜欢先插入所有员工的想法,所以我只需要每次都进行更新。但我正在努力让那些 UPDATE 语句正确。