私はここで少し立ち往生しています。条件に基づいて返されたビューを変更しようとしています。私は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
これにより、期待どおりの結果が得られますが、悪夢のような結晶レポートのため、このビューを少し変更する必要があります。この返された結果セットを取得し、同じテーブルと同じ Contract リレーションシップから取得した値を使用して既存の列を変更したいと考えています。たとえば、次のようになります。
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 フィールド値を共有している場合、別のタスクの完了日にすることです。