分類統計的SQL,你可能沒有用過
在企業開發中,經常要用到報表統計等功能,對於大多數程式設計師來說,所能想到的可能只是將資料按不同的條件取出,分批統計,而實際上,用sql自代的特性便能達到這種要求,這種即case 語句
按照SQL Server 聯機文件,case語法有兩種,格式如下:
簡單 CASE 函式:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END
CASE 搜尋函式:
CASE
WHEN Boolean_expression
[ ...n ]
[
ELSE else_result_expression
END
這兩種方式其實大同小宜,無非就是條件式即可以是值也可以是表示式.
下面看一下例項吧,呵呵
例一:
設某張進出人數統計表有name(姓名),recordDate(進出時間),state(0為進,1為出)這幾列組成,那麼
如果分批顯示一天的進出人數,可以如下進行:
select sum(case when state = 0 then 1 else 0 end),
sum(case when state = 1 then 1 else end) from recordtable
where datediff([day],getdate(),recordDate) = 0;
而且注意,when後的可以是值,也可以是表示式,因此,又有如下應用:
例2:設表結構如上,只不過name改成了重量(這都什麼含義啊,呵呵)那麼,如果要統計進出重量,就可以如下:
select sum(case when state = 0 then weight else 0 end),
sum(case when state = 1 then weight else end) from recordtable
where datediff([day],getdate(),recordDate) = 0;
還有,你可以在資料處理時直接完成要在介面上顯示的工作,比如,你如果將例1中的表在介面上顯示,那麼state肯定不會顯示為0或1,因為使用者不會明白0,1的含義,正常的思路可能是先生成dataset,再逐條處理,而這時,可以用case表示式提前處理資料,如下:
select name,recordtdate,case when sate = 0 then '進入' else '出入' end.
嘿嘿,這是我能想到的case的幾種用法,如好的建議,還希望各們看官能留言,拍磚