2015年6月27日 星期六

SQL上課練習:JOIN & Sub-Query



使用 SQL Server 2012專業開發與設計 CH7範例資料庫

題目:查詢 訂單的實際單價小於產品建議單價的所有產品類別銷售金額









有三張Table,分別是「訂單明細」、「產品資料」、「產品類別」

所有產品類別銷售金額,需要使用到「產品類別」中的 類別名稱

銷售金額需要使用到「訂單明細」  實際單價 數量

其中只需要列出實際單價小於建議單價的產品,所以需要「訂單明細」  實際單價 「產品資料」 建議單價


解法
將 「訂單明細」 「產品資料」作合併 (inner join),列出以下欄位

類別編號,建議單價,產品編號,實際單價,數量

--這邊不使用*是因為兩張Table都有產品編號,會有兩個產品編號的欄位出現

再將產出的Table和「產品類別」作合併(left outer join),最後再將各類別銷售金額加總做排序


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
--SELECT 子查詢
SELECT 類別名稱,SUM (實際單價*數量) AS 銷售金額

FROM 產品類別 left outer join 
  (SELECT 類別編號,建議單價,訂單明細.產品編號,實際單價,數量 
   FROM 訂單明細 inner join 產品資料 AS OD ON 訂單明細.產品編號 = OD.產品編號
   WHERE 訂單明細.實際單價 < OD.建議單價) AS PER ON 產品類別.類別編號 = PER.類別編號

GROUP BY 類別名稱
ORDER BY 銷售金額 DESC

--一般查詢
SELECT 類別名稱,SUM (實際單價*數量) AS 銷售金額

FROM 訂單明細 
  inner join 產品資料 ON 訂單明細.產品編號 = 產品資料.產品編號 and 訂單明細.實際單價 < 產品資料.建議單價
  right outer join 產品類別 ON 產品資料.類別編號 = 產品類別.類別編號

GROUP BY 類別名稱
ORDER BY 銷售金額 DESC

沒有留言:

張貼留言