範例一:
Select Datepart(m, 日期), 客戶名稱, SUM(數量)
From 書籍訂單
Group By 客戶名稱, Datepart(m, 日期)
Having Datepart(m, 日期) = 4
範例二:
Select Datepart(m, 日期), 客戶名稱, SUM(數量)
From 書籍訂單
Group By 客戶名稱, Datepart(m, 日期)
Having SUM(數量) >= 100
範例三:
Select 客戶名稱, COUNT(*) From
書籍訂單 Group By 客戶名稱
Having COUNT(*) < 5
Order By COUNT(*) ASC
範例四:
-- 以下是錯誤的
Select Datepart(m, 日期), 客戶名稱, SUM(數量)
From 書籍訂單
Where SUM(數量) >= 100
Group By 客戶名稱, Datepart(m, 日期)
範例四要改成:
Select Datepart(m, 日期), 客戶名稱, SUM(數量)
From 書籍訂單
Group By 客戶名稱, Datepart(m, 日期)
Having SUM(數量) >= 100
2. Join
a. inner join
說明:在 select 語句裡,必須指名 "dbo.訂單.客戶編號"。範例一:
Select 訂單序號, 日期, dbo.訂單.客戶編號, 客戶名稱 From 訂單
Join dbo.客戶 On dbo.訂單.客戶編號 = dbo.客戶.客戶編號
範例二:
Select 訂單序號, 日期, dbo.訂單.客戶編號 AS 訂單客戶編號,
客戶.客戶編號 AS 客戶客戶編號, 客戶名稱 From 訂單, 客戶
Where dbo.訂單.客戶編號 = dbo.客戶.客戶編號
範例一 的結果與 範例二 相同
範例三:選出 總價(單價*數量) 大於 20000 的書
b. outer join
範例一:在四月中,每家客戶皆下了幾張訂單,包含零。第一步:從訂單資料表選出四月份有哪些客戶,並加以算出每家客戶下訂的次數
第二步:從客戶資料表中選出所有客戶
第三步:以客戶編號為基準,用 left outer join 結合第一步(為後) & 第二步(為前)。之後再加上 isNull 判斷將 NULL 的值補上零。
select c.客戶名稱, isnull(t.cc,0) as 訂單數量 from dbo.客戶 c
left outer join
(select 客戶編號 , count(*)as cc from dbo.訂單
where DATEPART (m, 日期) = 4
group by 客戶編號) t
on c.客戶編號 = t.客戶編號
範例二:有哪些訂單的數量是大於 AVG 的數量
select 客戶名稱,書籍名稱,訂單序號 from dbo.書籍訂單
where 數量 >
(select AVG(數量) from dbo.書籍訂單)
order by 客戶名稱
說明:第一步先選出AVG;第二步再選出數量大於AVG的訂單
c. 比較
1. A in (a,b,c) :in 後面必須是一維陣列,就是單一欄位,多個數值。
2. where A > all (a,b,c):> 後面可以跟多個數比較。 all是指括弧內所有的數,可以用 MAX 來替換。
3. where A > any (a,b,c): any 是指括弧內的任何一個
d. 各家書店的數量佔所有總量的百分比
PS:無聊時,做了資料型態的轉換再轉換。
ㄟ....啊就是把佔有率只留小數二位。
No comments:
Post a Comment