我有点卡在这里。我正在尝试根据条件修改返回的视图。我对 SQL 相当熟悉,并且对返回的结果有点困难。这是我写的视图的部分组成部分:
WITH A AS (
SELECT
ROW_NUMBER() OVER (PARTITION BY fkidContract,fkidTemplateItem ORDER BY bStdActive DESC, dtdateplanned ASC) AS RANK,
tblWorkItems.fkidContract AS ContractNo,
....
FROM tblWorkItems
WHERE fkidTemplateItem IN
(2895,2905,2915,2907,2908,
2909,3047,2930,2923,2969,
2968,2919,2935,2936,2927,
2970,2979)
AND ...
)
SELECT * FROM A WHERE RANK = 1
返回结果类似于以下内容:
ContractNo| ItemNumber | Planned | Complete
001 | 100 | 01/01/1900 | 02/01/1900
001 | 101 | 03/04/1900 | 02/01/1901
001 | 102 | 03/06/1901 | 02/08/1900
002 | 100 | 01/03/1911 | 02/08/1913
这给了我预期的结果,但由于噩梦般的水晶报告,我需要稍微改变这个观点。我想获取这个返回的结果集并使用从同一个表和相同的合同关系中提取的值修改现有列,如下所示:
UPDATE A
SET A.Completed = ( SELECT R.Completed
FROM myTable R
INNER JOIN A
ON A.ContractNo = R.ContractNo
WHERE A.ItemNumber = 100 AND R.ItemNumber = 101
)
我想要做的是修改一个任务的“完成日期”,如果它们都共享相同的 ContractNo 字段值,则使其成为另一项任务的完成日期。