<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    想飛就別怕摔

    大爺?shù)牟M罵人

    SQL中CASE條件表達(dá)式

    SQL CASE 表達(dá)式是一種通用的條件表達(dá)式,類(lèi)似于其它語(yǔ)言中的 if/else 語(yǔ)句。

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

    CASE 子句可以用于任何表達(dá)式可以有效存在的地方。 condition 是一個(gè)返回boolean 的表達(dá)式。 如果結(jié)果為真,那么 CASE 表達(dá)式的結(jié)果就是符合條件的 result。 如果結(jié)果為假,那么以相同方式搜尋任何隨后的 WHEN 子句。 如果沒(méi)有 WHEN condition 為真,那么 case 表達(dá)式的結(jié)果就是在 ELSE 子句里的值。 如果省略了 ELSE 子句而且沒(méi)有匹配的條件, 結(jié)果為 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 表達(dá)式的數(shù)據(jù)的類(lèi)型都必須可以轉(zhuǎn)換成單一的輸出類(lèi)型。 

    下面這個(gè)"簡(jiǎn)單的" CASE 表達(dá)式是上面的通用形式的一個(gè)特殊的變種。

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

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

    上面的例子可以用簡(jiǎn)單 CASE 語(yǔ)法來(lái)寫(xiě):

    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 表達(dá)式并不計(jì)算任何對(duì)于判斷結(jié)果并不需要的子表達(dá)式。 比如,下面是一個(gè)可以避免被零除的方法:

    SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

    例1:一道SQL語(yǔ)句面試題
    表內(nèi)容:
    2005-05-09 勝
    2005-05-09 勝
    2005-05-09 負(fù)
    2005-05-09 負(fù)
    2005-05-10 勝
    2005-05-10 負(fù)
    2005-05-10 負(fù)

    如果要生成下列結(jié)果, 該如何寫(xiě)sql語(yǔ)句?

               勝 負(fù)
    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','負(fù)')
    insert into #tmp values('2005-05-09','負(fù)')
    insert into #tmp values('2005-05-10','勝')
    insert into #tmp values('2005-05-10','負(fù)')
    insert into #tmp values('2005-05-10','負(fù)')

    select rq, sum(case when shengfu='勝' then 1 else 0 end)'勝',
               sum(case when shengfu='負(fù)' then 1 else 0 end)'負(fù)'
               from #tmp group by rq
    ----------------------------------------------------------






    例2:表中有A B C三列,用SQL語(yǔ)句實(shí)現(xiàn):當(dāng)A列大于B列時(shí)選擇A列否則選擇B列,當(dāng)B列大于C列時(shí)選擇B列否則選擇C列。










    select (case when a>b then a else b end ),
           (case when b>c then b esle c end)
           from table_name

    ----------------------------------------------------------
    例3:有一張表,里面有3個(gè)字段:語(yǔ)文,數(shù)學(xué),英語(yǔ)。其中有3條記錄分別表示語(yǔ)文70分,數(shù)學(xué)80分,英語(yǔ)58分,請(qǐng)用一條sql語(yǔ)句查詢(xún)出這三條記錄并按以下條件顯示出來(lái)(并寫(xiě)出您的思路):  
       大于或等于80表示優(yōu)秀,大于或等于60表示及格,小于60分表示不及格。  
           顯示格式:  
           語(yǔ)文              數(shù)學(xué)                英語(yǔ)  
           及格              優(yōu)秀                不及格    
    ----------------------------------------------------------
    select
        (case when 語(yǔ)文>=80 then '優(yōu)秀'
              when 語(yǔ)文>=60 then '及格'
              else '不及格' end) as 語(yǔ)文,
        (case when 數(shù)學(xué)>=80 then '優(yōu)秀'
              when 數(shù)學(xué)>=60 then '及格'
              else '不及格' end) as 數(shù)學(xué),
        (case when 英語(yǔ)>=80 then '優(yōu)秀'
              when 英語(yǔ)>=60 then '及格'
             else '不及格' end) as 英語(yǔ),
    from table
    ----------------------------------------------------------------

    posted on 2008-11-13 15:35 生命的綻放 閱讀(3163) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 數(shù)據(jù)庫(kù)

    <2008年11月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(5)

    隨筆分類(lèi)(94)

    隨筆檔案(93)

    文章分類(lèi)(5)

    文章檔案(5)

    相冊(cè)

    JAVA之橋

    SQL之音

    兄弟之窗

    常用工具下載

    積分與排名

    最新評(píng)論

    閱讀排行榜

    主站蜘蛛池模板: 国产一级a毛一级a看免费视频| 亚洲国产精品无码久久九九| 中文字幕在线视频免费观看 | 在线观看免费播放av片| 豆国产96在线|亚洲| 亚洲成AV人综合在线观看| 国产av无码专区亚洲av果冻传媒| 日韩激情淫片免费看| 中文字幕在线免费观看| 两个人看的www免费高清| 亚洲.国产.欧美一区二区三区| 亚洲视频精品在线观看| 亚洲av无码专区在线播放| 亚洲国产专区一区| 日韩在线免费电影| 成年人免费观看视频网站| 91嫩草免费国产永久入口| 国产精品偷伦视频观看免费| www成人免费视频| 免费精品国产自产拍在线观看| 亚洲乱亚洲乱妇24p| 亚洲不卡影院午夜在线观看| 亚洲妓女综合网99| 亚洲理论精品午夜电影| 久久久久亚洲Av无码专| 亚洲视频精品在线| 亚洲av永久无码精品国产精品 | 久久er国产精品免费观看2| 国产精品永久免费视频| 羞羞视频免费网站日本| 精品特级一级毛片免费观看| 亚洲AV成人精品日韩一区| 亚洲Av无码国产一区二区| 亚洲第一第二第三第四第五第六| 亚洲精品无码av片| 亚洲AV综合永久无码精品天堂| 亚洲欧洲免费无码| 午夜亚洲WWW湿好爽| 一本久久免费视频| www在线观看播放免费视频日本| 一个人看的www免费高清|