簡體   English   中英

如何在 SQL 中編寫案例邏輯

[英]How to write case logic in SQL

我有一個場景,我想在下面編寫 SQL 案例邏輯

不明白何時使用符號'<>'

邏輯一:

if [ employee_name] = 'ABC' then
empcode='ABC'
empcourse=Null

邏輯2:

if [ employee_name] <> 'ABC' then
empcode='PQR-N'
empcourse='MBA'

以下是我嘗試編寫的查詢:

case
    when employee_name equal ABC and empcode equal 'ABC'
    then 
    empcode='ABC'
    empcourse=Null

使用兩個case表達式。 我想你想要:

(case when employee_name = 'ABC' then 'ABC' else 'PQR-N' end) as empcode,
(case when employee_name = 'ABC' then NULL else 'MBA' end) as empcourse 

您一次只能為 select 列表中的一列提供值; 因此,您必須與empcourse分開處理empcode值。

您的邏輯可以表示為:

CASE
  WHEN employee_name = 'ABC'
  THEN 'ABC'
  WHEN employee_name <> 'ABC'
  THEN 'PQR-N'
  ELSE NULL
END AS empcode,
CASE
  WHEN employee_name = 'ABC'
  THEN NULL
  WHEN employee_name <> 'ABC'
  THEN 'MBA'
  ELSE NULL
END AS empcourse

這是因為有第三種情況, employee_nameNULL然后employee_name = 'ABC'為假, employee_name <> 'ABC'也為假; 要明確說明您的 output 在第三種情況下,您可以測試前兩種,然后使用ELSE條件。

第一個表達式可以更明確地(和冗長地)寫成:

CASE
  WHEN employee_name IS NOT NULL AND employee_name = 'ABC'
  THEN 'ABC'
  WHEN employee_name IS NOT NULL AND employee_name <> 'ABC'
  THEN 'PQR-N'
  ELSE -- employee_name IS NULL
       NULL
END AS empcode,
CASE
  WHEN employee_name IS NOT NULL AND employee_name = 'ABC'
  THEN NULL
  WHEN employee_name IS NOT NULL AND employee_name <> 'ABC'
  THEN 'MBA'
  ELSE -- employee_name IS NULL
       NULL
END AS empcourse

如果您打算只使用兩種狀態(二進制邏輯,而不是使用第三個NULL狀態),那么:

CASE
  WHEN employee_name = 'ABC'
  THEN 'ABC'
  ELSE -- employee_name IS NULL OR employee_name <> 'ABC'
       'PQR-N'
END AS empcode,
CASE
  WHEN employee_name = 'ABC'
  THEN -- employee_name IS NULL OR employee_name <> 'ABC'
       NULL
  ELSE 'MBA'
END AS empcourse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM