2016-11-23 3 views
2

こんにちは皆にとって良い日です。このSQLシーケンスを修正する手助けをしてもらえますか?SQL - 集計がUPDATE文のセットリストに表示されない可能性があります。

私はそれを実行しようとすると、私はので、これらの2つのライン エラーを「集合体はUPDATE文のセットリストに表示されないことがあり、」取得しています
MERGE INTO table2 WITH (HOLDLOCK) AS target 
USING 
(
    SELECT column1, 
     AccessDate, 
     AccessCount, 
     column4, 
     column5, 
     column6, 
     column7, 
     column8 
    FROM table1 
    GROUP BY column1, column4, column5, column6, column7, column8 
) AS source 
ON target.column1 = source.column1 AND 
    target.column5 = source.column5 AND 
    target.column6 = source.column6 AND 
    target.column7 = source.column7 AND 
    target.column8 = source.column8 
WHEN MATCHED THEN 
UPDATE SET target.LastAccessDate = MAX(source.AccessDate), 
    target.LastWeeklyAccessCount = (SELECT SUM(source.AccessCount)) 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (column1, LastAccessDate, LastWeeklyAccessCount, column4, column5, column6, column7, column8) 
    VALUES (source.column1, source.AccessDate, source.AccessCount, source.column4, source.column5, source.column6, source.column7, source.column8); 

:私のコード

target.LastAccessDate = MAX(source.AccessDate), 
target.LastWeeklyAccessCount = (SELECT SUM(source.AccessCount)) 

AccessDateをグループ内のAccessDatesの最大値に更新し、LastWeeklyAccessCountをグループ内のカウントの合計に更新する必要があります。

一致するレコードが見つからない場合は、挿入してください。私は2年前と同じようにSQLで作業しましたが、多くのことを覚えていないので、どんなヘルプも評価されていません。

答えて

2

AccessDate、AccessCountは、ソース文の選択列リストにリストして、グループに表示されていないため、エラーがある:

MERGE INTO table2 WITH (HOLDLOCK) AS target 
    USING 
    (
     SELECT column1, 
      MAX(AccessDate) AS AccessDate, 
      SUM(AccessCount) AS AccessCount, 
      column4, 
      column5, 
      column6, 
      column7, 
      column8 
     FROM table1 
     GROUP BY column1, column4, column5, column6, column7, column8 
    ) AS source 
    ON target.column1 = source.column1 AND 
     target.column5 = source.column5 AND 
     target.column6 = source.column6 AND 
     target.column7 = source.column7 AND 
     target.column8 = source.column8 
    WHEN MATCHED THEN 
    UPDATE SET target.LastAccessDate = source.AccessDate, 
     target.LastWeeklyAccessCount = source.AccessCount 
    WHEN NOT MATCHED BY TARGET THEN 
     INSERT (column1, LastAccessDate, LastWeeklyAccessCount, column4, column5, column6, column7, column8) 
     VALUES (source.column1, source.AccessDate, source.AccessCount, source.column4, source.column5, source.column6, source.column7, source.column8); 
+0

が魅力のように働きました。ありがとうございました! –

+0

ステートメントを更新した後に別の問題が発生しました。 'オブジェクト 'dbo.table2''に重複するキー行を挿入できません。 'INSERT'文の' 'WHERE NO MATCHED'のために –

関連する問題