1

私はこのコードを持っています:

merge dbo.tblProblems as target 
using ( 
    select max(problemID), StationName, problemCode, max(ProblemCreateDate), count(*) 
    from dbo.tblProblems 
    group by StationName, problemCode 
) as source(id, StationName, problemCode, maxdate, rowcount) 
on ( 
        target.problemID = source.problemID 
    and target.StationName = target.StationName 
    and target.problemCode = target.problemCode 
) 
when matched then 
    update set ProblemCreateDate = maxdate, probCount = rowcount 
when not matched then delete ;    

しかし、次のエラーが発生します。

メッセージ 156、レベル 15、状態 1、行 6
キーワード「rowcount」付近の構文が正しくありません。

そして、このバージョンのクエリ:

;WITH n AS  
( 
  SELECT problemID, StationName, problemCode, ProblemCreateDate, probCount 
    c = COUNT(*) OVER (PARTITION BY StationName, problemCode), 
    rn = ROW_NUMBER() OVER  
    ( 
      PARTITION BY StationName, problemCode ORDER BY ProblemCreateDate DESC, problemID DESC 
    ) 
  FROM dbo.tblProblems
) 
 --SELECT problemID, StationName, problemCode, ProblemCreateDate, c 
 -- FROM n WHERE rn = 1; 
UPDATE n SET probCount = c 
  WHERE rn = 1; 

次のエラーが発生します。

メッセージ 102、レベル 15、状態 1、行 4
「=」付近の構文が正しくありません。

4

1 に答える 1

1

最初のクエリでrowcountは、は予約済みのキーワードです。別の単語(例row_count)を使用するか、角かっこで囲みます。

[rowcount]

2番目のクエリでは、次の後にコンマが必要ですprobCount

SELECT problemID, StationName, problemCode, ProblemCreateDate, probCount,
------------------------------------------------------------------------^
  c = COUNT(*) OVER (PARTITION BY StationName, problemCode), 

あなたは私のコードサンプルを正しく適応させていませんでした(末尾のコンマがあります)。

于 2012-08-13T18:06:28.187 に答える