iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
自我挑戰組

資料庫二年級:練習AdventureWorks範例資料庫系列 第 16

[第十六天]佔存表之1

  • 分享至 

  • xImage
  •  

今天要跟大家一起練習的主題,
是跟變數@很像的雙胞胎,
也是我工作時很喜歡的工具:佔存表。

(因為"AdventureWorks範例資料庫"的資料比較舊,
因此我們假設今年是2015年,
要來整理前一年2014年的消費資料。)

我們先來整理2014年,
每位會員的年度消費額總計:

  1. [Sales].[Customer]每一個CustomerID代表不同消費者。
  2. [Sales].[SalesOrderHeader]這張表得到消費金額,並以"年"作為單位加總。
SELECT datepart(year,OrderDate) 消費年度
      ,C.CustomerID 顧客編號
      ,sum(TotalDue) 消費金額
FROM [Sales].[SalesOrderHeader] S
JOIN [Sales].[Customer] C on S.CustomerID = C.CustomerID
WHERE datepart(year,OrderDate) = 2014
GROUP BY C.CustomerID,datepart(year,OrderDate)
ORDER BY SUM(TotalDue) DESC

得到的結果
https://ithelp.ithome.com.tw/upload/images/20220910/20152049AnzQF7agcv.jpg

佔存表架構

--宣告佔存表
  declare @佔存表名 類型table (欄位名 型態)
--insert資料
  insert into @佔存表名(欄位)
--複製、貼上上面那段語法
 (上面的查詢結果就是我們要存入的值)

操作看看

將這樣的結果存成"佔存表"

--宣告佔存表
  DECLARE @tempTable Table
  (
     cID int,
     totalSpent float
  )
--INSERT資料
INSERT INTO @tempTable(cID,totalSpent)
--複製、貼上上面那段語法
SELECT datepart(year,OrderDate) 消費年度
      ,C.CustomerID 顧客編號
      ,sum(TotalDue) 消費金額
FROM [Sales].[SalesOrderHeader] S
JOIN [Sales].[Customer] C on S.CustomerID = C.CustomerID
WHERE datepart(year,OrderDate) = 2014
GROUP BY C.CustomerID,datepart(year,OrderDate)
ORDER BY SUM(TotalDue) DESC
--檢視看看
SELECT * FROM @tempTable ORDER BY totalSpent DESC

除了沒有顯示年份外,
結果和上面相同:
https://ithelp.ithome.com.tw/upload/images/20220910/20152049y9x0WkWycU.jpg

這張佔存表示我們親手打造的,
因此表內的資料對我們來說不但熟悉,
也都是我們精挑細選的精華,
之後的工作就會因為這張佔存表而輕鬆許多啦!

之後幾天我們會一起從這張「精華佔存表」
整理出一些有用的資訊。


上一篇
[第十五天]預存程序-祝「誰」生日快樂
下一篇
[第十七天]佔存表之2:應用題考考你
系列文
資料庫二年級:練習AdventureWorks範例資料庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言