SQL使用计数更新多个列

SQL使用计数更新多个列,sql,sql-server,tsql,count,sql-update,Sql,Sql Server,Tsql,Count,Sql Update,我们目前有SQL更新语句,可以满足我们的需要,并更新tbl\u 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

我们目前有SQL更新语句,可以满足我们的需要,并更新
tbl\u 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具有学生id和特定标志

student_id, class, rm, a_flg, b_fl, c_flg ....

目前,您可以使用条件和将其合并为一个,如下所示:

UPDATE R SET
    a_count = a.a_count
    , b_count = a.b_count
    --... repeat for all columns
FROM #tbl_rprt R
INNER JOIN (
    SELECT
        new_c1, new_c2
        , SUM(CASE WHEN a_flg = 'Y' THEN 1 ELSE 0 END) a_count
        , SUM(CASE WHEN b_flg = 'Y' THEN 1 ELSE 0 END) b_count
        --, ... repeat for all flags
    FROM wrk_tbl_flgs
    GROUP BY new_c1, new_c2
) a ON a.new_c1 = R.class AND a.new_c2 = R.rm;

那么您正在将多个不同的列更新为完全相同的值?(计数?.PS
UPDATE c_count
似乎是错误的,
SET e_count=a.e_count
没有
e_count
。是的,我在post中编辑时搞砸了。更正。不,并非所有的标志对每个类别都是相同的计数/rm一个标志可能是低sat分数,种族…你可以使用
case X_flg…
在一个单独的查询中轻松地将其结合起来…我有一个潜藏的怀疑,有某种设计缺陷,但如果没有真正的表名和列名,谁能说啊,我应该先来这里。我知道这必须和一个案子一起完成,但我做错了吗