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 и задач 1,2,3 были установлены на значения «основного» проекта 0.