CTEs中仅获取cll.Claim_number计数求和结果的技术咨询
解决CTE中计数求和的输出问题
看起来你是在CTE里计算了每个分组的Claim_number计数(也就是COUNTOFSERVICES),但现在只想保留这个计数的求和值,同时保留你指定的其他字段,不想再输出单个分组的计数对吧?我来给你两种常见场景的解决办法:
场景一:获取全局总求和(所有分组计数的总和)
如果需要保留state、line这类维度字段,同时输出所有COUNTOFSERVICES的总求和值,可以用窗口函数实现,并且去掉原来的计数字段:
WITH PreviousCTEs AS ( -- 你那3个运行正常的CTE逻辑放在这里 ), ServiceCounts AS ( SELECT cll.company_desc AS state, cll.line, COUNT(cll.Claim_number) AS COUNTOFSERVICES FROM PreviousCTEs cll GROUP BY cll.company_desc, cll.line ) -- 修改后的查询:只保留指定字段和总求和值 SELECT state, line, SUM(COUNTOFSERVICES) OVER () AS TotalServicesSum FROM ServiceCounts;
这样输出结果里就只有你指定的state、line字段,以及所有分组计数的总和TotalServicesSum,不会再显示单个分组的COUNTOFSERVICES值。
场景二:按指定维度汇总求和
如果需要按某个维度(比如只按state)分组,计算该维度下的总服务数,直接在主查询里对CTE的计数字段做分组求和即可:
WITH PreviousCTEs AS ( -- 你那3个运行正常的CTE逻辑放在这里 ), ServiceCounts AS ( SELECT cll.company_desc AS state, cll.line, COUNT(cll.Claim_number) AS COUNTOFSERVICES FROM PreviousCTEs cll GROUP BY cll.company_desc, cll.line ) -- 修改后的查询:按指定维度汇总求和 SELECT state, -- 只保留你需要的维度字段 SUM(COUNTOFSERVICES) AS StateTotalServicesSum -- 按state分组的求和值 FROM ServiceCounts GROUP BY state;
这种方式会输出每个state对应的总服务数,完全去掉了单个分组的COUNTOFSERVICES计数。
简化版:直接全局计数
如果你的需求是完全不需要分组,直接获取所有Claim_number的总数,同时保留指定字段,可以简化成:
WITH PreviousCTEs AS ( -- 你那3个运行正常的CTE逻辑放在这里 ) SELECT DISTINCT -- 避免重复输出相同的state+line行 cll.company_desc AS state, cll.line, COUNT(cll.Claim_number) OVER () AS TotalServicesSum FROM PreviousCTEs cll;
内容的提问来源于stack exchange,提问作者cardonas
相关产品推荐
相关产品推荐

