小编典典

如果T-SQL中的记录为NULL,则如何替换字符串

sql

我正在编写一个T-SQL报告,该报告显示不同客户处于不同状态的帐户数量。该报告的结果如下:

Customer1    NoService        7
Customer1    IncompleteOrder  13
Customer1    NULL             9
Customer2    NoService        12
Customer2    Available        19
Customer2    NULL             3
...

‘NULL’状态是有效数据,但我不想显示NULL,而是要显示“ Pending”。到目前为止,这是我的SQL:

USE cdwCSP;
SELECT
   sr.sales_region_name   AS SalesRegion
   , micv.value
   , COUNT(sr.sales_region_name)
FROM prospect p
   LEFT JOIN sales_region sr
     ON p.salesRegionId = sr.sales_region_number
   LEFT JOIN prospectOrder po
     ON po.prospectId = p.prospectId
   LEFT JOIN wo
     ON wo.prospectId = p.prospectId
   LEFT JOIN woTray wot
     ON wot.woId = wo.woId
   LEFT JOIN miscInformationCustomerCategory micc
     ON micc.prospectId = p.prospectId
   LEFT JOIN miscInformationCustomerValues micv
     ON micv.miscInformationCustomerCategoryId = micc.miscInformationCustomerCategoryId
   LEFT JOIN miscInformationCategory mic
     ON micc.miscInformationCategoryId = mic.miscInformationCategoryId
WHERE wot.dateOut IS NULL
     AND mic.categoryName LIKE '%Serviceability%'
GROUP BY sr.sales_region_name, micv.value
ORDER BY sr.sales_region_name, micv.value;

任何帮助将不胜感激,我仍在学习T-SQL,因此这可能是一个容易回答的问题。


阅读 267

收藏
2021-05-05

共1个答案

小编典典

您可以使用COALESCEISNULL。前者是标准格式,并返回第一个NOT NULL参数(NULL如果所有参数均为,则返回NULL

SELECT COALESCE(micv.value,'Pending') as value

ISNULL 限制为仅2个参数,但是如果要测试的第一个值的评估成本很高(例如,子查询),则在SQL Server中效率更高。

ISNULL需要注意的一个潜在“陷阱”是它返回第一个参数的数据类型,因此,如果要替换的字符串长于列数据类型,则将需要强制转换。

例如

CREATE TABLE T(C VARCHAR(3) NULL);

INSERT T VALUES (NULL);

SELECT ISNULL(C,'Unknown')
FROM T

会回来 Unk

但是ISNULL(CAST(C as VARCHAR(7)),'Unknown')COALESCE两者都可以按需工作。

2021-05-05