基于SQL中的空列插入错误消息列

问题描述:

我有一张如下创建的表。基于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' 

任何帮助表示赞赏。

感谢。

我想用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

使用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