欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL Server臨時表合并與數(shù)量匯總的實(shí)現(xiàn)方法

 更新時間:2025年08月31日 15:50:50   作者:nbsaas-boot  
不同業(yè)務(wù)邏輯在中間處理過程中,會產(chǎn)生多個結(jié)構(gòu)類似的臨時表,如果希望將這些結(jié)果進(jìn)行合并,并且按相同 id 進(jìn)行數(shù)量匯總,SQL Server 提供了多種實(shí)現(xiàn)方式,本文將系統(tǒng)介紹幾種常見做法,并給出適用場景,需要的朋友可以參考下

引言

在實(shí)際開發(fā)中,我們經(jīng)常會遇到這樣的需求:
不同業(yè)務(wù)邏輯在中間處理過程中,會產(chǎn)生多個結(jié)構(gòu)類似的臨時表(Temporary Table),例如兩個統(tǒng)計結(jié)果表,字段結(jié)構(gòu)相同,但數(shù)據(jù)來源不同。如果希望將這些結(jié)果進(jìn)行合并,并且按相同 id 進(jìn)行數(shù)量匯總,SQL Server 提供了多種實(shí)現(xiàn)方式。本文將系統(tǒng)介紹幾種常見做法,并給出適用場景。

1. 場景舉例

假設(shè)我們有兩個臨時表,分別存儲來自不同渠道的訂單統(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);

需求:

  • 將兩個臨時表合并;
  • 相同 idnum 相加;
  • 保留所有 id

2. 方法一:UNION ALL + GROUP BY(推薦)

這是最簡潔、性能較優(yōu)的方式,尤其適用于需要合并多個相同結(jié)構(gò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;

結(jié)果:

id | total_num
1  | 10
2  | 25
3  | 45
4  | 25

特點(diǎn)

  • 簡潔、易讀;
  • 可擴(kuò)展性強(qiáng):如果有多個臨時表,只需繼續(xù) UNION ALL
  • 適用場景:表結(jié)構(gòu)完全一致。

3. 方法二:FULL OUTER JOIN

如果你需要清晰地看到來自不同表的數(shù)據(jù)來源,或者兩個表字段不完全一致,可以使用 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;

結(jié)果與方法一相同:

id | total_num
1  | 10
2  | 25
3  | 45
4  | 25

特點(diǎn)

  • 可以保留兩個表的來源數(shù)據(jù);
  • 寫法比 UNION ALL 冗長;
  • 適用場景:當(dāng)需要對不同表進(jìn)行逐字段對齊處理時更合適。

4. 方法三:合并多個臨時表(通用模板)

在實(shí)際項目中,我們可能會有三個以上的臨時表,例如 #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;

這種方式可以輕松擴(kuò)展到 N 個臨時表。

5. 性能對比與優(yōu)化建議

UNION ALL + GROUP BY

  • 更適合大數(shù)據(jù)量合并,SQL Server 優(yōu)化器對這種模式有較好支持。
  • 如果合并的表數(shù)量多,可以考慮將其放入臨時表再做聚合。

FULL OUTER JOIN

  • 更直觀,但如果表數(shù)量超過 2 個,寫法復(fù)雜度會急劇上升。
  • 性能上通常比 UNION ALL 差。

建議:如果只是簡單數(shù)量合并,盡量使用 UNION ALL + GROUP BY
如果需要保留不同來源表的明細(xì)差異,可以使用 FULL OUTER JOIN。

6. 總結(jié)

在 SQL Server 中合并兩個或多個臨時表并對相同 id 進(jìn)行數(shù)量匯總,有兩種主要思路:

  • UNION ALL + GROUP BY:簡潔高效,適合多表合并,推薦使用。
  • FULL OUTER JOIN:邏輯清晰,適合兩個表逐字段對齊場景。

在實(shí)際業(yè)務(wù)開發(fā)中,應(yīng)根據(jù)臨時表數(shù)量和需求靈活選擇方案。對于多來源的統(tǒng)計計算,建議統(tǒng)一采用 UNION ALL + GROUP BY,既保證了性能,也便于擴(kuò)展。

以上就是SQL Server臨時表合并與數(shù)量匯總的實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于SQL Server臨時表合并與數(shù)量匯總的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論