簡體   English   中英

SQL 更新多列計數

[英]SQL Update Multiple columns with counts

我們目前有 SQL 更新語句,可滿足我們的需求並更新tbl_rprt表。 以下是一些更新查詢,還有其他幾個類似的查詢。 我想知道是否有另一種方法可以完成這項工作,也許將它們全部組合成一個 SQL 語句。 #tbl_rprt是每個 class 和房間rmwrk_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 ....

就目前而言,您可以合並為一個,使用如下條件和:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM