資料來源:https://dotblogs.com.tw/topcat/2009/10/29/11332

今天看到一篇文章覺得很棒

事實上今天也利用這個語法解決我跨年度資料處理的困擾

有時候需要整併一些資料時,UNION ALL可以是個不錯的技巧。本篇用一個範例來說明這樣的應用

緣起

有時候需要整併一些資料時,UNION ALL可以是個不錯的技巧。本篇用一個範例來說明這樣的應用

範例題目:

假設有四家商店,被其中一家整合了,於是需要將四家商店的資料整合。假設目前四家店都可以整理出(機種MODEL、數量QTY、單價PRICE),而每一家店,都有賣一些獨特的機種,是其他三家所沒有的。那麼如果希望整理出以下這樣的資料,大家會怎麼整理呢??


機種MODEL、店家A金額A_AMT、店家B金額B_AMT、店家C金額C_AMT、店家D_AMT

例如這樣的資料

SHOP_A

UA001

SHOP_B

UA002

SHOP_C

UA003

SHOP_D

UA004

希望的結果

UA005

我們可以

1.先計算個家電的各機種合計

2.然後每家店的查詢結果,用0代表其他的店

3.將這些資料UNION ALL聯集起來

4.透過GROUP BY , SUM將相同機種的資料合併計算

相關語法如下

SELECT MODEL, SUM(A_AMT) A_AMT, SUM(B_AMT) B_AMT, SUM(C_AMT) C_AMT, SUM(D_AMT) D_AMT
FROM
(
	--商店A資料
	SELECT MODEL, QTY*PRICE A_AMT, 0 AS B_AMT, 0 AS C_AMT, 0 AS D_AMT
	FROM dbo.SHOP_A
	
	UNION ALL
	
	--商店B資料
	SELECT MODEL, 0 AS A_AMT, QTY*PRICE B_AMT, 0 AS C_AMT, 0 AS D_AMT
	FROM dbo.SHOP_B
	
	UNION ALL
	
	--商店C資料
	SELECT MODEL, 0 AS A_AMT, 0 AS B_AMT, QTY*PRICE C_AMT, 0 AS D_AMT
	FROM dbo.SHOP_C
	
	UNION ALL
	
	--商店D資料
	SELECT MODEL, 0 AS A_AMT, 0 AS B_AMT, 0 AS C_AMT, QTY*PRICE D_AMT
	FROM dbo.SHOP_D
) V1
GROUP BY MODEL	

 

arrow
arrow
    文章標籤
    SQL 資料庫
    全站熱搜

    Y銘 發表在 痞客邦 留言(0) 人氣()