表a
id adress(位址) leval 能源
1 北京 i
2 上海 ii
3 廣州 iii
5 北京 i
7 上海 iii
結果
位址 leval(i)總和 leval(ii)總和 leval(iii)總和
北京 2 0 0
上海 0 1 1
廣州 0 0 1
用sql語句寫出表中顯示的結果
以上是我遇到的乙個題目,自己做了一段時間沒完整做出來,問了乙個朋友,最終解決了。有兩種實現方法。現總結如下:
1.case語句實現
select address,sum(leval1) leval1,sum(leval2) leval2,sum(leval3) leval3 from
(select address,
(case when leval='i' then count(leval) else '0' end) as leval1,
(case when leval='ii' then count(leval) else '0' end) as leval2,
(case when leval='iii' then count(leval) else '0' end) as leval3
from a
group by address,leval) as leval group by address
2.pivot語句實現
select address,[i] as leval1,[ii] as leval2,[iii] as leval3 from
(select address,[leval] from a) as p
pivot (
count([leval])
for
[leval] in ([i],[ii],[iii])
) as t
因為以前沒有用過pivot這個語句,所以對這個語句進行了相應的學習。pivot 和 unpivot 關係運算子將表值表示式更改為個。pivot 通過將表示式某一列中的唯一值轉換為輸出中的多個列來旋轉錶值表示式,並在必要時對最終輸出中所需的任何其餘列值執行聚合。 pivot 提供的語法比一系列複雜的 select...case 語句中所指定的語法更簡單和更具可讀性。
在我們進行複雜的查詢統計的時候,特別是銷售統計、處理大量資料的時候,pivot的作用就顯得非常突出。
unpivot 與 pivot 執行相反的操作,將表值表示式的列轉換為列值。但是在實際應用中,有些聚合之後的資料很難進行拆分。所以呢,unpivot並非pivot的逆過程。
注意:對公升級到 sql server 2005 或更高版本的資料庫
使用 pivot 和 unpivot 時,必須將資料庫的相容級別設定為 90 或更高。
有的sql server 2005初始安裝時,預設的相容級別為「80」,這時我們需要將相容級別進行設定,不然,pivot不能正常的執行。
具體的修改方案如下:
修改相容級別步驟
1、連線到相應的 sql server 資料庫引擎例項之後,在物件資源管理器中,單擊伺服器名稱以展開伺服器樹。
2、展開「資料庫」,然後根據資料庫的不同,選擇使用者資料庫,或展開「系統資料庫」,再選擇系統資料庫。
3、右鍵單擊資料庫,再單擊「屬性」。「資料庫屬性」對話方塊將開啟。
4、在「選擇頁」窗格中,單擊「選項」。當前相容級別顯示在「相容級別」列表框中。
5、若要更改相容級別,請從列表中選擇其他
選項。 可用選項包括 sql server 2000 (80)、sql server 2005 (90) 或 sql server 2008 (100)。
switch語句用法詳解
一般形式 switch 表示式 意思是先計算表示式的值,再逐個和case 後的常量表示式比較,若不等則繼續往下比較,若一直不等,則執行default後的語句 若等於某乙個常量表示式,則從這個表示式後的語句開始執行,並執行後面所有case後的語句。與if語句的不同 if語句中若判斷為真則只執行這個判斷...
switch case語句用法詳解
switch 開關 的意思,是一種 選擇 語句,它用法非常簡單。switch 是多分支選擇語句。說得通俗點,多分支就是多個 if語句的組合。從功能上說,switch 語句和 if 語句完全可以相互取代。但從程式設計的角度,它們又各有各的特點,所以至今為止也不能說誰可以完全取代誰。當巢狀的 if 比較...
SQL語句 SELECT LIKE 用法詳解
sql語句 select like like用法詳解 a 包含零個或多個字元的任意字串 1 like mc 將搜尋以字母 mc 開頭的所有字串 如 mcbadden 2 like inger 將搜尋以字母 inger 結尾的所有字串 如 ringer stringer 3 like en 將搜尋在任...