dva*_*ria 10 sql t-sql sql-server string null
我正在撰写一份T-SQL报告,其中显示了针对不同客户的不同状态的帐户数量.报告结果如下:
Customer1 NoService 7
Customer1 IncompleteOrder 13
Customer1 NULL 9
Customer2 NoService 12
Customer2 Available 19
Customer2 NULL 3
...
Run Code Online (Sandbox Code Playgroud)
'NULL'状态是有效数据,但我想显示"Pending"而不是显示NULL.到目前为止,这是我的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;
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,我仍然在学习T-SQL,所以这可能是一个容易回答的问题.
Mar*_*ith 22
你可以使用COALESCE
或ISNULL
.前者是标准的并返回第一个NOT NULL
参数(或者NULL
如果所有参数都是NULL
)
SELECT COALESCE(micv.value,'Pending') as value
Run Code Online (Sandbox Code Playgroud)
ISNULL
仅限于2个参数,但如果要测试的第一个值很昂贵(例如子查询),则SQL Server中的效率更高.
ISNULL
要注意的一个潜在"问题" 是它返回第一个参数的数据类型,因此如果要替换的字符串比列数据类型允许的话,则需要进行强制转换.
例如
CREATE TABLE T(C VARCHAR(3) NULL);
INSERT T VALUES (NULL);
SELECT ISNULL(C,'Unknown')
FROM T
Run Code Online (Sandbox Code Playgroud)
会回来 Unk
但是,ISNULL(CAST(C as VARCHAR(7)),'Unknown')
或COALESCE
两者都可以按预期工作.
归档时间: |
|
查看次数: |
42466 次 |
最近记录: |