Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用另一个表中的数据更新特定行_Sql_Sql Server - Fatal编程技术网

Sql 使用另一个表中的数据更新特定行

Sql 使用另一个表中的数据更新特定行,sql,sql-server,Sql,Sql Server,我正在使用MS SQL。我想用另一个表中的数据更新表中的特定行。我创建了一个查询,该查询将获取我要更新的特定行。请注意,我使用了select查询来选择需要更新的特定行。还要注意,有一个子查询用于获取正确的行。对我来说,这使得它很难合并到set语句中 select tbl1.assessmentcode, tbl1.Overview from subjectassessmentareas tbl1 inner join ( select assessmentcode,MIN(areas

我正在使用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
这给了我

现在我想用另一个表中的数据更新overview列。这个select查询提供了我想要用来更新另一个表的信息

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

是否有人可以帮助我使用语法从上面第一个查询中获得的行更新overview列,并使用第二个查询中包含的overview列,其中Query1.AssessmentCode=Query2.AssessmentCode来自两个查询

如何使用set语句,然后使用上面的第一个查询来指定要设置的行?其他类似的问题只需使用一个简单的集合,然后是一个没有任何where语句的字段。

尝试以下内容:

;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)
请注意,此处的
评估代码应为主键。

请尝试以下操作:

;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)

请注意,此处的
评估代码应为主键。

只需在可更新的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

只需将这两个连接到可更新的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

抱歉-我使用的是MS SQLProbable duplicate of Yes,我看了这个,但我不确定如何合并第一个select查询以获得要设置的正确行。抱歉-我使用的是MS SQLProbable duplicate of Yes,我看了这个,但我不确定如何合并第一个select查询以获得要设置的正确行。非常感谢。这很有效。我没有太多使用CTEs,这是一个很好的简单解决方案。非常感谢。这很有效。没有太多使用CTEs,这是一个很好的简单解决方案。