日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

case when条件表达式

發布時間:2024/8/26 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 case when条件表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SQL CASE 表達式是一種通用的條件表達式,類似于其它語言中的 if/else 語句。?

CASE WHEN condition THEN result?
[WHEN ...]?
[ELSE result]?
END?

CASE 子句可以用于任何表達式可以有效存在的地方。 condition 是一個返回boolean 的表達式。 如果結果為真,那么 CASE 表達式的結果就是符合條件的 result。 如果結果為假,那么以相同方式搜尋任何隨后的 WHEN 子句。 如果沒有 WHEN condition 為真,那么 case 表達式的結果就是在 ELSE 子句里的值。 如果省略了 ELSE 子句而且沒有匹配的條件, 結果為 NULL。

  • 例子:???
  • ??
  • SELECT?*?FROM?test;???
  • a???
  • ---???
  • 1???
  • 2???
  • 3???
  • SELECT?a,???
  • CASE?WHEN?a=1?THEN?'one'???
  • WHEN?a=2?THEN?'two'???
  • ELSE?'other'???
  • END???
  • FROM?test;???
  • a?|?case???
  • ---+-------???
  • 1?|?one???
  • 2?|?two???
  • 3?|?other?

  • 所有 result 表達式的數據的類型都必須可以轉換成單一的輸出類型。??

    下面這個"簡單的" CASE 表達式是上面的通用形式的一個特殊的變種。

  • CASE?expression???
  • WHEN?value?THEN?result???
  • [WHEN?...]???
  • [ELSE?result]???
  • END ??

  • 先計算 expression 的值, 然后與所有在WHEN 子句里聲明的 value 對比,直到找到一個相等的。 如果沒有找到匹配的,則返回在 ELSE 子句里的 result (或者 NULL)。 這個類似于 C 里的 switch 語句。?

    上面的例子可以用簡單 CASE 語法來寫:

  • SELECT?a,???
  • CASE?a?WHEN?1?THEN?'one'???
  • WHEN?2?THEN?'two'???
  • ELSE?'other'???
  • END???
  • FROM?test;???
  • a?|?case???
  • ---+-------???
  • 1?|?one???
  • 2?|?two???
  • 3?|?other?

  • CASE 表達式并不計算任何對于判斷結果并不需要的子表達式。 比如,下面是一個可以避免被零除的方法:?

    SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;?
    例1:一道SQL語句面試題?
    表內容:?
    2005-05-09 勝?
    2005-05-09 勝?
    2005-05-09 負?
    2005-05-09 負?
    2005-05-10 勝?
    2005-05-10 負?
    2005-05-10 負?

    如果要生成下列結果, 該如何寫sql語句??

    ??????????? 勝 負?
    2005-05-09? 2? 2?
    2005-05-10? 1? 2?

  • create?table?#tmp(rq?varchar(10),shengfu?nchar(1))???
  • ??
  • insert?into?#tmp?values('2005-05-09','勝')???
  • insert?into?#tmp?values('2005-05-09','勝')???
  • insert?into?#tmp?values('2005-05-09','負')???
  • insert?into?#tmp?values('2005-05-09','負')???
  • insert?into?#tmp?values('2005-05-10','勝')???
  • insert?into?#tmp?values('2005-05-10','負')???
  • insert?into?#tmp?values('2005-05-10','負')???
  • select?rq,?sum(case?when?shengfu='勝'?then?1?else?0?end)'勝',???
  • ???????????sum(case?when?shengfu='負'?then?1?else?0?end)'負'???
  • ???????????from?#tmp?group?by?rq???
  • ----------------------------------------------------------?

  • 例3:有一張表,里面有3個字段:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄并按以下條件顯示出來(并寫出您的思路):?
    ?? 大于或等于80表示優秀,大于或等于60表示及格,小于60分表示不及格。??
    ?????? 顯示格式:??
    ?????? 語文????????????? 數學??????????????? 英語??
    ?????? 及格????????????? 優秀??????????????? 不及格????
    ----------------------------------------------------------

  • select???
  • ????(case?when?語文>=80?then?'優秀'???
  • ??????????when?語文>=60?then?'及格'???
  • ??????????else?'不及格'?end)?as?語文,???
  • ????(case?when?數學>=80?then?'優秀'???
  • ??????????when?數學>=60?then?'及格'???
  • ??????????else?'不及格'?end)?as?數學,???
  • ????(case?when?英語>=80?then?'優秀'???
  • ??????????when?英語>=60?then?'及格'???
  • ??????????else?'不及格'?end)?as?英語,???
  • from?table ?


  • 總結

    以上是生活随笔為你收集整理的case when条件表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。