星期五, 4月 11, 2014

[SQL] AdventureWork T-SQL 練習

論壇上看見針對 AdventureWorks 的作業練習題,內容如下

資料:AdventureWorks2008R2 的 Sales.SalesOrderHeader Table
需求:業務經理想要分析銷售區域代碼是 7、8、9 的這三個區域中各個業務員的銷售數據
條件:每個銷售區域、每個銷售員(包含無銷售員的網路訂單)的以下各項資料
  1. 訂單的筆數(根據有幾筆資料計算)
  2. 現金交易的筆數(根據 CreditCardID 欄位計算),CreditCardID 欄位內是NULL值的代表現金交易,提示:總交易筆數 = 現金交易的筆數 + 信用卡交易的筆數
  3. 信用卡交易的筆數(根據 CreditCardID 欄位計算)
  4. 客戶使用不同信用卡的張數(根據 CreditCardID 欄位判斷)
  5. 含稅的總銷售金額(由貨品小計( SubTotal 欄位)加稅額( TaxAmt 欄位)計算)
  6. 平均每筆銷售訂單的運費(根據 Freight 欄位計算)
  7. 輸出的結果要包含"區域代碼"( TerritoryID 欄位)、"業務員代號"( SalesPersonID 欄位)、"訂單筆數"、"現金交易筆數"、"信用卡交易筆數"、"信用卡數"、"總交易金額(含稅)"、"平均每筆運費"八個欄位
  8. 輸出時,先按區域代碼由小到大排列,區域代碼相同時,再按業務員代號從最小到最大排列
T-SQL 解法
SELECT 
    TerritoryID AS [區域代碼],
    SalesPersonID AS [業務員代號],
    COUNT(*) AS [訂單筆數],
    SUM(CASE WHEN CreditCardID IS NULL THEN 1 ELSE 0 END) AS [現金交易筆數] ,
    SUM(CASE WHEN CreditCardID IS NOT NULL THEN 1 ELSE 0 END) AS [信用卡交易筆數] ,
    COUNT(DISTINCT CreditCardID) AS [信用卡張數] ,
    SUM(SubTotal + TaxAmt) AS [總交易金額(含稅)],
    AVG(Freight) AS [平均每筆運費]
FROM Sales.SalesOrderHeader
WHERE TerritoryID IN (7,8,9)
GROUP BY TerritoryID , SalesPersonID
ORDER BY TerritoryID , SalesPersonID
[SQL] AdventureWork T-SQL 練習

沒有解答可以參考,也不知道對不對 ~~ ^_^''

沒有留言:

張貼留言