Sql 使用另一个表中的数据更新特定行
我正在使用MS SQL。我想用另一个表中的数据更新表中的特定行。我创建了一个查询,该查询将获取我要更新的特定行。请注意,我使用了select查询来选择需要更新的特定行。还要注意,有一个子查询用于获取正确的行。对我来说,这使得它很难合并到set语句中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
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,这是一个很好的简单解决方案。