2014-11-23 65 views
0

我有這段代碼,但它不起作用。SQL中爲NULL的情況

當NULL存在時,它應該給出'沒有標題但沒有標題。

SELECT employee.pin, 
CASE gender 
WHEN 'M' or (employee.titel IS NULL) THEN CONCAT('Mister ', ' ', ' ', person.fname, ', ') 
WHEN 'W' or (employee.titel IS NULL) THEN CONCAT('Mrs ', ' ', ' ',  person.fname, ', ') 
WHEN 'M' THEN CONCAT('Mister ', employee.titel, ' ', person.fname, ', ') 
WHEN 'W' THEN CONCAT('Mrs ', employee.titel, ' ', person.fname, ', ') 
END AS salutation 
FROM person,employee 

where person.pin=employee.pin 
ORDER BY pin 

回答

2

您可以使用CONCAT_WS將直接跳過空值:

SELECT 
    employee.pin, 
    CASE WHEN gender='M' THEN CONCAT_WS(' ', 'Mister', employee.titel, person.fname) 
     WHEN gender='W' THEN CONCAT_WS(' ', 'Mrs', employee.titel, person.fname) 
    END AS salutation 
FROM 
    person INNER JOIN employee 
    ON person.pin=employee.pin 
ORDER BY pin 
+0

感謝這工作!將在8分鐘內接受 – cce85899 2014-11-23 17:34:11

+0

@ cce85899歡迎您:)請注意,如果您需要在稱呼後添加逗號,您仍然需要另一個CONCAT – fthiella 2014-11-23 17:36:23

1

你將不得不使用其他CASE語法,因爲NULL不等於什麼:

CASE 
WHEN gender='M' or (employee.titel IS NULL) THEN CONCAT('Mister ', ' ', ' ', person.fname, ', ') 
WHEN gender='W' or (employee.titel IS NULL) THEN CONCAT('Mrs ', ' ', ' ',  person.fname, ', ') 
WHEN gender='M' THEN CONCAT('Mister ', employee.titel, ' ', person.fname, ', ') 
WHEN gender='W' THEN CONCAT('Mrs ', employee.titel, ' ', person.fname, ', ') 
WHEN gender IS NULL THEN ... 
END AS salutation