UPDATE dbo.Projects
SET Date = (SELECT Date FROM dbo.Projects p1
WHERE p1.ProjectID = '000' AND p1.TaskID = dbo.Projects.TaskID)
WHERE ProjectID IN ('P01', 'P02', 'P03', 'P04')
AND TaskID IN ('001', '002', '003')
將是爲你做?
因此,對於的TaskID = 001,該語句將
SELECT Date FROM dbo.Projects WHERE ProjectID = '000' AND TaskID = '001'
,然後更新每個項目(P01-P04)和的TaskID = 001這個日期。這就是你要找的,不是?
您也可以使用OUTPUT子句來證明給你看的是什麼更新時間:
UPDATE dbo.Projects
SET Date = (SELECT Date FROM dbo.Projects p1
WHERE p1.ProjectID = '000' AND p1.TaskID = dbo.Projects.TaskID)
OUTPUT inserted.ProjectID, inserted.TaskID, inserted.Date
WHERE ProjectID IN ('P01', 'P02', 'P03', 'P04')
AND TaskID IN ('001', '002', '003')
這將導致每行被更新到輸出的新值(例如,更新後),這樣你可以檢查並看看有什麼更新,以及什麼值。
剛剛運行的查詢,這是結果我得到:
ProjectID TaskID Date
0 1 2009-10-28 00:00:00.000
0 2 2009-12-01 00:00:00.000
0 3 2010-02-24 00:00:00.000
1 1 2009-10-28 00:00:00.000
1 2 2009-12-01 00:00:00.000
1 3 2010-02-24 00:00:00.000
2 1 2009-10-28 00:00:00.000
2 2 2009-12-01 00:00:00.000
2 3 2010-02-24 00:00:00.000
爲1,2,3已經被設置爲「主」的值項目1和2以及任務的日期項目0 。
乍一看,它似乎並不認爲此查詢的日期與從主到其他每個任務。我讀錯了嗎? –
它爲您正在處理的每個TaskID選擇項目「000」中的「日期」,並將其他項目的「日期」設置爲該選定日期 –
投票支持你的人是吸菸的人,一個很好的解釋。謝謝一堆! –