我有一個視圖,其中包含作業列表,其中包含分配給他們的人員以及他們所處的階段等數據。我需要編寫一個存儲過程,以返回每個人每個階段有多少作業。我該如何做一個Upsert表格?
到目前爲止,我有這個(簡體):
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語句正確。
您提到的「一式兩份」是INSERT ...在DUPLICATE KEY UPDATE上,文檔位於:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – nickf 2008-10-14 02:16:11