【发布时间】:2021-08-13 03:15:59
【问题描述】:
我们目前有可以满足我们需求的 SQL 更新语句并更新 tbl_rprt 表。以下是一些更新查询,还有其他几个类似的查询。我想知道是否有另一种方法可以完成这项工作,也许将它们全部组合成一个 SQL 语句。 #tbl_rprt 是每个班级和房间 rm 的 wrk_tbl_flgs 中特定标志的所有计数的报告。
UPDATE #tbl_rprt
SET a_count = a.a_count
FROM (SELECT COUNT(*) a_count, new_c1, new_c2 FROM wrk_tbl_flgs WHERE a_flg = 'Y' GROUP BY new_c1, new_c2) a
WHERE a.new_c1 = #tbl_rprt.class AND a.new_c2 = #tbl_rprt.rm
UPDATE #tbl_rprt
SET b_count = a.b_count
FROM (SELECT COUNT(*) b_count, new_c1, new_c2 FROM wrk_tbl_flgs WHERE b_flg = 'Y' GROUP BY new_c1, new_c2) a
WHERE a.new_c1 = #tbl_rprt.class AND a.new_c2 = #tbl_rprt.rm
UPDATE #tbl_rprt
SET c_count = a.c_count
FROM (SELECT COUNT(*) c_count, new_c1, new_c2 FROM wrk_tbl_flgs WHERE c_flg = 'Y' GROUP BY new_c1, new_c2) a
WHERE a.new_c1 = #tbl_rprt.class AND a.new_c2 = #tbl_rprt.rm
UPDATE #tbl_rprt
SET d_count = a.d_count
FROM (SELECT COUNT(*) d_count, new_c1, new_c2 FROM wrk_tbl_flgs WHERE d_flg = 'Y' GROUP BY new_c1, new_c2) a
WHERE a.new_c1 = #tbl_rprt.class AND a.new_c2 = #tbl_rprt.rm
UPDATE #tbl_rprt
SET e_count = a.e_count
FROM (SELECT COUNT(*) e_count, new_c1, new_c2 FROM wrk_tbl_flgs WHERE e_flg = 'Y' GROUP BY new_c1, new_c2) a
WHERE a.new_c1 = #tbl_rprt.class AND a.new_c2 = #tbl_rprt.rm
更新 wrk_tbl_flgs 有 student_id 和特定标志
student_id, class, rm, a_flg, b_fl, c_flg ....
【问题讨论】:
-
所以您将多个不同的列更新为完全相同的值? (计数?)PS
UPDATE c_count似乎是错误的,SET e_count = a.e_count没有e_count。 -
是的,我在后期编辑时搞砸了。更正。并非每个班级/rm的所有标志都相同,标志可能是低SAT分数,种族......
-
您可以使用
case X_flg...轻松将其组合到一个查询中 -
我偷偷怀疑存在某种设计缺陷,但没有真正的表名和列名可以说
标签: sql sql-server tsql count sql-update