2016-07-15 33 views
0

我正在使用MS SQL。我想用另一個表中的數據更新表格中的特定行。我創建了一個查詢來獲取我想要更新的特定行。請注意,我使用了一個選擇查詢來選擇需要更新的特定行。另請注意,有一個子查詢用於獲取正確的行。對我而言,這很難將其納入一套陳述中。使用另一個表中的數據更新特定行

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

是否有人可以幫助我的語法來更新從第一個查詢與包含在第二查詢一覽表中得到上述行概述列這兩個查詢中的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剛剛加入這兩個:

;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應該是主鍵。

相關問題