2017-02-24 28 views
1

我有一張如下創建的表。基於SQL中的空列插入錯誤消息列

CREATE TABLE TEST_NULL 
(
ID INT, 
NAME VARCHAR(10), 
PLACE VARCHAR(10), 
ADDRESS VARCHAR(10), 
ERRORMESSAGE VARCHAR(100) 
) 

INSERT INTO TEST_NULL 
VALUES 
(1, 'ABC', 'BLR', 'WHT', NULL), 
(2, 'DEF', 'BLR', NULL, NULL), 
(3, 'GHI', NULL, NULL, NULL), 
(4, 'JKL', NULL, 'WHT', NULL) 

SELECT * FROM TEST_NULL 

當我爲表格做了選擇時,我想要得到ERRORMESSAGE列的預期結果,如下所示。

我需要得到第一紀錄:

1, 'ABC', 'BLR', 'WHT', NULL 

我需要獲得第二個紀錄:

2, 'DEF', 'BLR', NULL, 'Address is NULL' 

我需要得到第三個紀錄:

3, 'GHI', NULL, NULL, 'Place, Address is NULL' 

我需要得到第4條記錄爲:

4, 'JKL', NULL, 'WHT', 'Place is NULL' 

任何幫助表示讚賞。

感謝。

回答

1

我想用CASE表達式生成錯誤消息是去這裏最徹底的方法:

SELECT ID, NAME, PLACE, ADDRESS, 
     CASE WHEN PLACE IS NULL AND ADDRESS IS NULL THEN 'Place, Address is NULL' 
      WHEN PLACE IS NULL      THEN 'Place is NULL' 
      WHEN ADDRESS IS NULL     THEN 'Address is NULL' 
      ELSE NULL END 
FROM TEST_NULL 
+0

謝謝Tim。我已經嘗試過,但是我有很多字段需要檢查,而且這看起來有點硬編碼。所以我在尋找一些可以處理這個問題的功能? – Emraan

+0

Oracle有一個'DECODE'函數可以做你想做的事情,但是SQL Server沒有它。如果你在尋找替代品,大多數情況下你會發現一個CASE表達式作爲推薦。 –

+0

當然提姆。現在讓我繼續這種方法。如果您遇到任何最佳方式,請隨時分享。謝謝。 – Emraan

0

使用Case條款: -

SELECT ID,NAME,PLACE,ADDRESS, case 

      when 
       PLACE is not null and ADDRESS is not null 
      then null 
      when 
       PLACE is null and ADDRESS is not null 
      then 'PLACE is NULL' 
      when 
       PLACE is not null and ADDRESS is null 
      then 'ADDRESS is NULL' 
      when 
       PLACE is null and ADDRESS is null 
      then 'PLACE, Address is NULL' 
      end as ERRORMESSAGE 

FROM TEST_NULL 

結果: -

ID NAME PLACE ADDRESS ERRORMESSAGE 
1 ABC  BLR  WHT  NULL 
2 DEF  BLR  NULL ADDRESS is NULL 
3 GHI  NULL NULL PLACE, Address is NULL 
4 JKL NULL  WHT PLACE is NULL 
+0

該解決方案適用於3至4列,但我有14列檢查,這似乎不適用於14列。任何我可以使用的功能? – Emraan

+0

上表只是我創建的一個示例來解釋我的問題。我實際上有一個包含14列的表來檢查空值並將錯誤消息連接到單個列。 – Emraan