程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 分類統計的SQL,你可能沒有用過

分類統計的SQL,你可能沒有用過

編輯:關於SqlServer

在企業開發中,經常要用到報表統計等功能,對於大多數程序員來說,所能想到的可能只是將數據按不同的條件取出,分批統計,而實際上,用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的幾種用法,如好的建議,還希望各們看官能留言,拍磚
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved