基于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
答
使用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
谢谢Tim。我已经尝试过,但是我有很多字段需要检查,而且这看起来有点硬编码。所以我在寻找一些可以处理这个问题的功能? – Emraan
Oracle有一个'DECODE'函数可以做你想做的事情,但是SQL Server没有它。如果你在寻找替代品,大多数情况下你会发现一个CASE表达式作为推荐。 –
当然提姆。现在让我继续这种方法。如果您遇到任何最佳方式,请随时分享。谢谢。 – Emraan