我正在编写一个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,因此这可能是一个容易回答的问题。
您可以使用COALESCE或ISNULL。前者是标准格式,并返回第一个NOT NULL参数(NULL如果所有参数均为,则返回NULL)
COALESCE
ISNULL
NOT 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
Unk
但是ISNULL(CAST(C as VARCHAR(7)),'Unknown')或COALESCE两者都可以按需工作。
ISNULL(CAST(C as VARCHAR(7)),'Unknown')