SQL Server臨時表合并與數量匯總的實現方法
引言
在實際開發(fā)中,我們經常會遇到這樣的需求:
不同業(yè)務邏輯在中間處理過程中,會產生多個結構類似的臨時表(Temporary Table),例如兩個統(tǒng)計結果表,字段結構相同,但數據來源不同。如果希望將這些結果進行合并,并且按相同 id 進行數量匯總,SQL Server 提供了多種實現方式。本文將系統(tǒng)介紹幾種常見做法,并給出適用場景。
1. 場景舉例
假設我們有兩個臨時表,分別存儲來自不同渠道的訂單統(tǒng)計:
CREATE TABLE #tmp1 (id INT, num INT); CREATE TABLE #tmp2 (id INT, num INT); INSERT INTO #tmp1 VALUES (1, 10), (2, 20), (3, 30); INSERT INTO #tmp2 VALUES (2, 5), (3, 15), (4, 25);
需求:
- 將兩個臨時表合并;
- 相同
id的num相加; - 保留所有
id。
2. 方法一:UNION ALL + GROUP BY(推薦)
這是最簡潔、性能較優(yōu)的方式,尤其適用于需要合并多個相同結構表的情況。
SELECT id, SUM(num) AS total_num
FROM (
SELECT id, num FROM #tmp1
UNION ALL
SELECT id, num FROM #tmp2
) t
GROUP BY id;結果:
id | total_num 1 | 10 2 | 25 3 | 45 4 | 25
特點
- 簡潔、易讀;
- 可擴展性強:如果有多個臨時表,只需繼續(xù)
UNION ALL; - 適用場景:表結構完全一致。
3. 方法二:FULL OUTER JOIN
如果你需要清晰地看到來自不同表的數據來源,或者兩個表字段不完全一致,可以使用 FULL OUTER JOIN。
SELECT
COALESCE(t1.id, t2.id) AS id,
ISNULL(t1.num, 0) + ISNULL(t2.num, 0) AS total_num
FROM #tmp1 t1
FULL OUTER JOIN #tmp2 t2
ON t1.id = t2.id;結果與方法一相同:
id | total_num 1 | 10 2 | 25 3 | 45 4 | 25
特點
- 可以保留兩個表的來源數據;
- 寫法比
UNION ALL冗長; - 適用場景:當需要對不同表進行逐字段對齊處理時更合適。
4. 方法三:合并多個臨時表(通用模板)
在實際項目中,我們可能會有三個以上的臨時表,例如 #tmp1、#tmp2、#tmp3。
此時推薦使用 UNION ALL + GROUP BY:
SELECT id, SUM(num) AS total_num
FROM (
SELECT id, num FROM #tmp1
UNION ALL
SELECT id, num FROM #tmp2
UNION ALL
SELECT id, num FROM #tmp3
) t
GROUP BY id;這種方式可以輕松擴展到 N 個臨時表。
5. 性能對比與優(yōu)化建議
UNION ALL + GROUP BY:
- 更適合大數據量合并,SQL Server 優(yōu)化器對這種模式有較好支持。
- 如果合并的表數量多,可以考慮將其放入臨時表再做聚合。
FULL OUTER JOIN:
- 更直觀,但如果表數量超過 2 個,寫法復雜度會急劇上升。
- 性能上通常比
UNION ALL差。
建議:如果只是簡單數量合并,盡量使用 UNION ALL + GROUP BY。
如果需要保留不同來源表的明細差異,可以使用 FULL OUTER JOIN。
6. 總結
在 SQL Server 中合并兩個或多個臨時表并對相同 id 進行數量匯總,有兩種主要思路:
- UNION ALL + GROUP BY:簡潔高效,適合多表合并,推薦使用。
- FULL OUTER JOIN:邏輯清晰,適合兩個表逐字段對齊場景。
在實際業(yè)務開發(fā)中,應根據臨時表數量和需求靈活選擇方案。對于多來源的統(tǒng)計計算,建議統(tǒng)一采用 UNION ALL + GROUP BY,既保證了性能,也便于擴展。
以上就是SQL Server臨時表合并與數量匯總的實現方法的詳細內容,更多關于SQL Server臨時表合并與數量匯總的資料請關注腳本之家其它相關文章!
相關文章
親自教你使用?ChatGPT?編寫?SQL?JOIN?查詢示例
這篇文章主要介紹了使用ChatGPT編寫SQL?JOIN查詢,作為一種語言模型,ChatGPT 可以就如何構建復雜的 SQL 查詢和 JOIN 提供指導和建議,但它不能直接訪問 SQL 數據庫,它可以幫助您了解語法、最佳實踐和有關如何構建查詢以高效執(zhí)行的一般指導,需要的朋友可以參考下2023-02-02
SQLServer中生成雪花ID(Snowflake?ID)的實現方法
這篇文章主要介紹了在SQL?Server中生成雪花ID(Snowflake?ID)的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-08-08
SQL?Server數據庫中已存在名為'student'對象的解決辦法
這篇文章主要給大家介紹了關于SQL?Server數據庫中已存在名為'student'對象的解決辦法,解決方法很簡單,并且也很實用,不止有這一個用處,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11

