MsSql 中 Case的應用 (二) [SQL Server]

來源:互聯網
上載者:User

在Check中使用Case函數


在Check中使用Case函數在很多情況下都是非常不錯的解決方案。可能有很多人根本就不用Check,那麼我建議你在看過下面的例子之後也嘗試一下在SQL中使用Check。
下面我們來舉個例子:
  公司A,這個公司有個規定,女職員的工資必須高於1000塊。如果用Check和Case來表現的話,如下所示 :

CONSTRAINT check_salary CHECK
( CASE WHEN sex = '2'
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 1 END = 1 )

如果單純使用Check,如下所示:

CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )

 

女職員的條件倒是符合了,男職員就無法輸入了。

 

六,在Case函數中使用sum函數

假X有下面一個表 

學號    課程ID(class_id)   課程名(class_name)   主修(main_class_fl)

-------------------------------------------------------------
100       1         經濟學           y
100       2         曆史學           N
200       2         曆史學           N
200       3         考古學           Y
200       4         電腦           N
300       4         電腦           N
400       5         化學            N
500       6         數學            N

  有的學生選擇了同時修幾門課程(100,200),也有的學生只選擇了一門課程(300,400,500)。選修多門課程的學生,要選擇一門課程作為主修,主修fl裡面寫入 Y。只選擇一門課程的學生,主修fl為N(實際上要是寫入Y的話,就沒有下面的麻煩事了,為了舉例子,還請多多包含)。
  現在我們要按照下面兩個條件對這個表進行查詢 : 只選修一門課程的人,返回那門課程的ID , 選修多門課程的人,返回所選的主課程ID。 簡單的想法就是,執行兩條不同的SQL語句進行查詢。  

 --條件1:只選擇了一門課程的學生

SELECT std_id, MAX(class_id) AS main_class
FROM Studentclass
GROUP BY std_id
HAVING COUNT(*) = 1;

 執行結果1
STD_ID   MAIN_class
------   ----------
300      4
400      5
500      6

 --條件2:選擇多門課程的學生

SELECT std_id, class_id AS main_class
FROM Studentclass
WHERE main_class_fl = 'Y' ;

 

執行結果2
STD_ID  MAIN_class
------  ----------
100     1
200     3


如果使用Case函數,我們只要一條SQL語句就可以解決問題,具體如下所示 :

代碼

SELECT  std_id,
CASE WHEN COUNT(*) = 1 --只選擇一門課程的學生的情況
THEN MAX(class_id)
ELSE MAX(CASE WHEN main_class_fl = 'Y'
THEN class_id
ELSE NULL END
)
END AS main_class
FROM Studentclass
GROUP BY std_id;

運行結果
STD_ID   MAIN_class
------   ----------
100      1
200      3
300      4
400      5
500      6

  通過在Case函數中嵌套Case函數,在合計函數中使用Case函數等方法,我們可以輕鬆的解決這個問題。使用Case函數給我們帶來了更大的自由度。 最後提醒一下使用Case函數的新手注意不要犯下面的錯誤: 

CASE col_1
      WHEN      1      THEN 'Right'
      WHEN      NULL   THEN 'Wrong'
END 

在這個語句中When Null這一行總是返回unknown,所以永遠不會出現Wrong的情況。因為這句可以替換成WHEN col_1 = NULL,這是一個錯誤的用法,這個時候我們應該選擇用WHEN col_1 IS NULL。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.