最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

1. 場(chǎng)景舉例

假設(shè)我們有兩個(gè)臨時(shí)表,分別存儲(chǔ)來(lái)自不同渠道的訂單統(tǒng)計(jì):

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);

需求:

  • 將兩個(gè)臨時(shí)表合并;
  • 相同 idnum 相加;
  • 保留所有 id

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

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

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

3. 方法二:FULL OUTER JOIN

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

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

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

在實(shí)際項(xiàng)目中,我們可能會(huì)有三個(gè)以上的臨時(shí)表,例如 #tmp1、#tmp2#tmp3。
此時(shí)推薦使用 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 個(gè)臨時(shí)表。

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

UNION ALL + GROUP BY

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

FULL OUTER JOIN

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

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

6. 總結(jié)

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

  • UNION ALL + GROUP BY:簡(jiǎn)潔高效,適合多表合并,推薦使用。
  • FULL OUTER JOIN:邏輯清晰,適合兩個(gè)表逐字段對(duì)齊場(chǎng)景。

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

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

相關(guān)文章

最新評(píng)論

赤水市| 石门县| 和龙市| 陆良县| 大荔县| 双流县| 文成县| 富阳市| 天津市| 马龙县| 沙河市| 桂东县| 江城| 津南区| 榆中县| 沅陵县| 武平县| 哈密市| 通河县| 安平县| 湖口县| 昭觉县| 乌苏市| 大连市| 灵石县| 稷山县| 松江区| 汉寿县| 会宁县| 平舆县| 尚义县| 井冈山市| 昌宁县| 长白| 舒兰市| 凤凰县| 扎囊县| 甘谷县| 甘肃省| 会泽县| 双桥区|