存储过程中汇总不同临时表内工单数据的技术需求
我来帮你搞定这个工单汇总的需求!咱们可以通过SQL的关联查询或合并分组的方式,把两个临时表的工单数据汇总到新临时表里。下面给你具体的实现思路和代码示例:
实现步骤与示例代码
1. 先明确临时表结构(基于需求假设)
假设你的两个临时表字段是对齐的,结构如下:
- 电话工单临时表:
#Temp_PhoneTickets,字段包含Category(分类)、Dept_D1(部门d1)、Dept_D2(部门d2)、TicketNum(工单数量) - IVR工单临时表:
#Temp_IVRTickets,字段与上面完全一致
2. 方法一:全外关联+分组汇总(适合预统计过数量的临时表)
如果两个临时表已经是按分类、部门统计好的工单数量,我们可以用全外关联把两边的数据对齐,再计算各类型工单总数:
-- 创建汇总临时表 CREATE TABLE #Temp_CombinedTickets ( Category VARCHAR(50), Dept_D1 VARCHAR(50), Dept_D2 VARCHAR(50), TotalPhoneTickets INT, TotalIVRTickets INT, GrandTotal INT ) -- 插入汇总数据 INSERT INTO #Temp_CombinedTickets SELECT COALESCE(p.Category, i.Category) AS Category, COALESCE(p.Dept_D1, i.Dept_D1) AS Dept_D1, COALESCE(p.Dept_D2, i.Dept_D2) AS Dept_D2, ISNULL(SUM(p.TicketNum), 0) AS TotalPhoneTickets, ISNULL(SUM(i.TicketNum), 0) AS TotalIVRTickets, ISNULL(SUM(p.TicketNum), 0) + ISNULL(SUM(i.TicketNum), 0) AS GrandTotal FROM #Temp_PhoneTickets p FULL OUTER JOIN #Temp_IVRTickets i ON p.Category = i.Category AND p.Dept_D1 = i.Dept_D1 AND p.Dept_D2 = i.Dept_D2 GROUP BY COALESCE(p.Category, i.Category), COALESCE(p.Dept_D1, i.Dept_D1), COALESCE(p.Dept_D2, i.Dept_D2)
3. 方法二:合并后透视统计(适合单条工单存储的临时表)
如果两个临时表是存储单条工单记录(未预统计数量),可以先合并所有记录,再用条件统计分类各类型工单:
-- 创建汇总临时表 CREATE TABLE #Temp_CombinedTickets ( Category VARCHAR(50), Dept_D1 VARCHAR(50), Dept_D2 VARCHAR(50), PhoneTicketCount INT, IVRTicketCount INT, TotalCount INT ) -- 插入数据:先合并工单并标记类型,再分组统计 INSERT INTO #Temp_CombinedTickets SELECT Category, Dept_D1, Dept_D2, SUM(CASE WHEN TicketType = 'Phone' THEN 1 ELSE 0 END) AS PhoneTicketCount, SUM(CASE WHEN TicketType = 'IVR' THEN 1 ELSE 0 END) AS IVRTicketCount, COUNT(*) AS TotalCount FROM ( -- 合并两个临时表,添加工单类型标识 SELECT Category, Dept_D1, Dept_D2, 'Phone' AS TicketType FROM #Temp_PhoneTickets UNION ALL SELECT Category, Dept_D1, Dept_D2, 'IVR' AS TicketType FROM #Temp_IVRTickets ) AS CombinedRawData GROUP BY Category, Dept_D1, Dept_D2
4. 关键注意事项
- 确保两个临时表的
Category、Dept_D1、Dept_D2字段类型完全一致,避免关联或分组时出现隐式转换错误 - 如果使用SQL Server,
#开头是会话级临时表,仅当前连接可见;如果需要跨会话访问可以用##全局临时表 - 存储过程结束前记得清理临时表(若不需要保留):
DROP TABLE IF EXISTS #Temp_PhoneTickets, #Temp_IVRTickets, #Temp_CombinedTickets
内容的提问来源于stack exchange,提问作者user3725135
相关产品推荐
相关产品推荐

