1. 程式人生 > >分類統計的SQL,你可能沒有用過

分類統計的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

THEN result_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的幾種用法,如好的建議,還希望各們看官能留言,拍磚