小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

case 用法

 comeonwyj 2015-10-29

寫SQL語句時,或在PL/SQL中,經(jīng)常需要在一個SQL語句中,根據(jù)不同的條件,有多種處理方法,如下面的例子:出售一種商品時,單價不同,折扣不同,對這種需求的處理,如果分情況處理,將會很麻煩,如果用Case語句,就可以在一條SQL語句中得到想要的結(jié)果。

Case的語法:

case when 條件A Then 結(jié)果A When 條件B 結(jié)果B....... else 結(jié)果N end和Decode 不同的是,Decode 只能針對固定的值,而 Case 可以用不是固定值,需是一個條件。

現(xiàn)在有以下的需求,有一個字符串,最后的兩位可能是 ’/R’ ,’/T’ 另外,有的后兩位沒有前面的’/R’ ,’/T’ ,現(xiàn)在針對不同的需要,要將 ’/R’ ,’/T’ 取掉,沒 ’/R’ ,’/T’, 就不做處理。

A01JCL-A01JCL/GF117F0001TR/RSQL寫法:
select (case
when instr(code, ’/R’) > 0 then
substr(code, 1, instr(code, ’/R’) - 1)
when instr(code, ’/T’) > 0 then
substr(code, 1, instr(code, ’/T’) - 1)
else
’0’
end)
from table_A t ;

利用case語句做一些查詢,主要想完成類似交差表功能  
  下面的語句是針對pubs數(shù)據(jù)庫的sales表編寫的  
  SELECT   SUM(CASE   sales.stor_id   WHEN   '6380'   THEN   sales.qty   ELSE   0   END)   AS   col1,    
            SUM(CASE   sales.stor_id   WHEN   '7066'   THEN   sales.qty   ELSE   0   END)   AS   col2    
  FROM   sales  
   
  這個語句只完成了我所要求的部分功能,現(xiàn)在我想再加一層并且關(guān)系的條件,例如stor_id=’6380’并且   payterms=60,stor_id=’6380’并且   payterms=30,stor_id=’7066’并且   payterms=60,stor_id=’7066’并且   payterms=30  
  這只是一種較簡單的情況,并且關(guān)系的條件可能會更多,要求這些語句不是由開發(fā)人員手工來寫,要由程序根據(jù)條件自動生成,所以一定要有規(guī)律,否則程序無法形成SQL語句

SELECT   SUM(CASE   WHEN   sales.stor_id='6380'   and   payterms=60   THEN   sales.qty   ELSE   0   END)   AS   col1,    
          SUM(CASE   WHEN   sales.stor_id='6380'   and   payterms=30   THEN   sales.qty   ELSE   0   END)   AS   col2,    
          SUM(CASE   sales.stor_id   WHEN   '7066'   and   payterms=60   THEN   sales.qty   ELSE   0   END)   AS   col3,    
          SUM(CASE   sales.stor_id   WHEN   '7066'   and   payterms=30   THEN   sales.qty   ELSE   0   END)   AS   col4    
  FROM   sales  

如下湊出SQL語句是一個辦法,但比較麻煩也不太可能通用:  
   
   
  SELECT   SUM(CASE   WHEN   sales.stor_id='6380'   and   payterms=60   THEN   sales.qty   ELSE   0   END)   AS   col1,    
          SUM(CASE   WHEN   sales.stor_id='6380'   and   payterms=30   THEN   sales.qty   ELSE   0   END)   AS   col2,    
          SUM(CASE   WHEN   sales.stor_id   ='7066'   and   payterms=60   THEN   sales.qty   ELSE   0   END)   AS   col3,    
          SUM(CASE   WHEN   sales.stor_id   ='7066'   and   payterms=30   THEN   sales.qty   ELSE   0   END)   AS   col4    
  FROM   sales  

 

CASE 可能是 SQL 中被誤用最多的關(guān)鍵字之一。雖然你可能以前用過這個關(guān)鍵字來創(chuàng)建字段,但是它還具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。

  首先讓我們看一下 CASE 的語法。在一般的 SELECT 中,其語法如下:

SELECT <myColumnSpec> =
CASE
WHEN <A> THEN <somethingA>
WHEN <B> THEN <somethingB>
ELSE <somethingE>
END


  在上面的代碼中需要用具體的參數(shù)代替尖括號中的內(nèi)容。下面是一個簡單的例子:

USE pubs
GO
SELECT
    Title,
    'Price Range' =
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END
FROM titles
ORDER BY price
GO


  這是 CASE 的典型用法,但是使用 CASE 其實可以做更多的事情。比方說下面的 GROUP BY 子句中的 CASE:

SELECT 'Number of Titles', Count(*)
FROM titles
GROUP BY
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END
GO


  你甚至還可以組合這些選項,添加一個 ORDER BY 子句,如下所示:

USE pubs
GO
SELECT
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END AS Range,
    Title
FROM titles
GROUP BY
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END,
    Title
ORDER BY
    CASE
        WHEN price IS NULL THEN 'Unpriced'
        WHEN price < 10 THEN 'Bargain'
        WHEN price BETWEEN 10 and 20 THEN 'Average'
        ELSE 'Gift to impress relatives'
    END,
    Title
GO


  注意,為了在 GROUP BY 塊中使用 CASE,查詢語句需要在 GROUP BY 塊中重復(fù) SELECT 塊中的 CASE 塊。

  除了選擇自定義字段之外,在很多情況下 CASE 都非常有用。再深入一步,你還可以得到你以前認(rèn)為不可能得到的分組排序結(jié)果集。


 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多