2016-07-15 3 views
0

私はMS SQLを使用しています。私はテーブル内の特定の行を別のテーブルのデータで更新したい。私は更新したい特定の行を取得するクエリを作成しました。 selectクエリを使用して、更新が必要な特定の行を選択していることに注意してください。また、右の行を取得するために使用されるサブクエリがあることにも注意してください。私にとって、これはset文に組み込むことを困難にします。特定の行を別のテーブルのデータで更新します。

select tbl1.assessmentcode, tbl1.Overview from subjectassessmentareas tbl1 
inner join 
( 
select assessmentcode,MIN(areaseq) as minassessarea from subjectassessmentareas 
where resultgroup = 'PR_Yr8_2' and ResultType = 'KUS_5' 
group by AssessmentCode 
) tbl2 
on tbl1.AssessmentCode = tbl2.AssessmentCode and tbl1.AreaSeq = tbl2.minassessarea 
where fileyear = 2016 and filesemester = 3 

これは、今、私は別のテーブルからデータを概観列を更新したい私に

enter image description here

を与えます。この選択クエリは私に、他のテーブルを更新するために使用したい情報を与えます。

SELECT AssessmentCode, Overview 
FROM SubjectAssessments 
WHERE (ClassCampus = 'S') 
    and (FileYear = 2015) 
    and (FileSemester = 3) 
    and filetype = 'A' 
    and AssessmentCode like '08%' 

これは私

enter image description here

を与える誰かが2番目のクエリに含まれている概要欄で上記の最初のクエリで取得した行からの概要の列を更新するための構文で私を助けてください両方のクエリのQuery1.AssessmentCode = Query2.AssessmentCodeです。

私はset文を使用できますが、上記の最初のクエリを使ってどの行を設定するのですか?他の同様の質問では、単純なセットを使用して、where文がないフィールドを使用します。

+0

申し訳ありません - 私はのMS SQL –

+0

可能な複製を使用しています([SQL Server 2005で別のテーブル内のデータを、対応するから、一つのテーブルのデータを更新する方法] http://stackoverflow.com/questions/4920394/how-to-update-data-in-one-table-from-corresponding-data-in-another-table-in-sql) –

+0

はい、私はこれを見ましたしかし、私はどのように正しい行を設定するために最初の選択クエリを組み込むか分からない。 –

答えて

1

ただ、更新CTEでこれら2に参加:

;with x as (
    select tbl1.assessmentcode, tbl1.Overview 
    from subjectassessmentareas tbl1 
    inner join 
    ( 
    select assessmentcode,MIN(areaseq) as minassessarea from subjectassessmentareas 
    where resultgroup = 'PR_Yr8_2' and ResultType = 'KUS_5' 
    group by AssessmentCode 
    ) tbl2 
    on tbl1.AssessmentCode = tbl2.AssessmentCode and tbl1.AreaSeq = tbl2.minassessarea 
    where fileyear = 2016 and filesemester = 3 
), 
y as (
    SELECT AssessmentCode, Overview 
    FROM SubjectAssessments 
    WHERE (ClassCampus = 'S') 
     and (FileYear = 2015) 
     and (FileSemester = 3) 
     and filetype = 'A' 
     and AssessmentCode like '08%' 
), 
z as (
    select x.Overview as dest, y.Overview as src 
    from x join y on x.AssessmentCode = y.AssessmentCode 
) 
update z set dest = src 
+0

ありがとうございました。これはうまくいく。 CTEをあまり使わなかったのですが、これはシンプルな解決策です。 –

1

は、次の試してみてください。

;WITH cteBaseInfo AS 
(
    SELECT AssessmentCode, Overview 
    FROM SubjectAssessments 
    WHERE (ClassCampus = 'S') 
     and (FileYear = 2015) 
     and (FileSemester = 3) 
     and filetype = 'A' 
     and AssessmentCode like '08%' 
) 

, cteToBeUpdated AS 
(
    select tbl1.assessmentcode, tbl1.Overview from subjectassessmentareas tbl1 
    inner join 
    ( 
     select assessmentcode,MIN(areaseq) as minassessarea from subjectassessmentareas 
     where resultgroup = 'PR_Yr8_2' and ResultType = 'KUS_5' 
     group by AssessmentCode 
    ) tbl2 
    on tbl1.AssessmentCode = tbl2.AssessmentCode and tbl1.AreaSeq = tbl2.minassessarea 
    where fileyear = 2016 and filesemester = 3. 
) 

UPDATE subjectassessmentareas 
SET  Overview = (SELECT Overview FROM cteBaseInfo WHERE AssessmentCode = subjectassessmentareas.AssessmentCode) 
WHERE AssessmentCode IN (SELECT AssessmentCode FROM cteToBeUpdated) 

ここAssessmentCodeが主キーである必要があり、ことに注意してください。

関連する問題