數據庫之Case When
阿新 • • 發佈:2017-06-18
data- 沒有 lec 的人 返回 bsp end 中國 .net
近期幾天的工作本來組長是安排我用mindfocion畫幾個圖,本來以為難點是這個控件的使用,可是開發的時候才發現由於數據量有點多,所以在開發的時候匯總這些信息倒是費了我許多的功夫,最後總結一下就是寫了幾個SQL語句,這裏與大家分享一下。假設有須要用的就太好了。
先說一下需求,組長讓我畫一個圖。要求是把近期幾年的**信息統計一下,比如2012年這個**交接了多少次,2013年多少次,總共多少次。想想也不難是吧,於是組長問我怎麽樣,我就輕松的接下來了。
可是曾經一直接觸的是簡單的SQL語句和一些EntityFramework等工具,對於SQL語句就真的把我難住了。寫了一天的SQL語句,也是沒有達到想要的效果。後來上網看了一下,原來SQL裏邊有一個Case When語句。
用途
當我們在寫SQL語句的時候,假設遇到這麽一種情況,就是假如。
。。
。則。
。
。,否則。
。
。
。比如,增加是城市是北京,就返回時中國城市,假設是東京,就返回日本城池。否則返回西歐城市。
這個請款下我們就能夠用到這個,比例如以下邊的小樣例。
select case when t.name = ‘北京‘ then ‘中國‘ case when t.name = ‘東京‘ then ‘日本‘ else ‘西歐‘ end from test1 t當然這還是一個簡答的應用,比如我這次項目中用的CaseWhen的使用方法。就用到了條件篩選和SQL語句,比如我要查詢2014年叫lisi的人有多少,2015年lisi的人有多少。那麽下邊的語句就能幫我簡單的實現
select to_char(t.birthday ,‘yyyy‘), sum(case when to_char(t.birthday ,‘yyyy‘)= ‘2014‘ and t.name = ‘lisi‘ then 1 when to_char(t.birthday ,‘yyyy‘)= ‘2015‘ and t.name = ‘lisi‘ then 1 else 0 end) as firYear from test1 t group by to_char(t.birthday ,‘yyyy‘);大家自己觀察發現我在上邊用到了Group by來進行分組。由於假設沒有這個的話,查詢出來的結果例如以下圖
可是假設使用了group by分組的話,效果例如以下
實現的效果不一樣,所以大家須要什麽樣子的表格。就怎麽查詢就能夠。
事實上上邊說了這麽多,好像就是一個if...else...,可是這個是全部數據庫都能夠實現的。可是在Oracle。另一個類似於咱們的三目運算的一個小語法。
select decode(sex, ‘M‘, ‘Male‘, ‘F‘, ‘Female‘, ‘Unknown‘) from employees;當然假設咱們的邏輯簡單能夠用這個,只是邏輯略微復雜一些的建議不要用,感覺沒有CaseWhen的邏輯清晰,並且代碼的移植性也不太好。畢竟僅僅有Oracle能用。
總結一下,假設我們須要在數據庫中進行邏輯推斷。不防用一下咱們的CaseWhen,或者Oracle的decode。加上group by 效果更佳。
數據庫之Case When